web-dev-qa-db-ja.com

1次元配列で{{#each}}を使用して値にアクセスする

{{#each}}ヘルパーを使用して多次元配列を反復処理する多くの例を見つけましたが、1次元配列の各値にアクセスする方法がわかりません。

たとえば、次の配列を使用します。

skills: ['Design', 'Development', 'HTML5', 'CSS', 'JavaScript'],

以下のようなヘルパーで各アイテムを出力するにはどうすればよいですか?

template: Handlebars.compile(
'<div>' + 
    '{{#each skills}} {{ the_item_output }} {{/each}}' +
'</div>'
),

実際のアイテムを表示するには、{{ the_item_output }}に何を入れる必要がありますか?

26
shrewdbeans
{{#each skills}}
  <li>{{this}}</li>
{{/each}}
54
alexdd55

スカラー値の配列は、 Simple Iterators 文法を使用する必要があります。 skillsプロパティで#eachブロックを宣言する必要があります。

各値のプレースホルダーは、{{this}}または{{.}}のいずれかです。

次のテンプレートを使用する必要があります。

{{#each skills}}
    <li>{{this}}</li>
{{/each}}

または、#listを使用できます。

{{#list skills}}
    <li>{{.}}</li>
{{/list}}

function listToHTML(items) {
  return '<ul>' + items.map(function(item) {
    return '<li>' + item + '</li>';
  }).join('') + '</ul>';
}

Handlebars.registerHelper({
  scalar_list_raw : function(items) {
    return listToHTML(items);
  },
  
  scalar_list_safe_string: function(items) {
    return new Handlebars.SafeString(listToHTML(items));
  },
});

var data = {
  skills: [ 'Design', 'Development', 'HTML5', 'CSS', 'JavaScript' ],
};

$(function() {
  var source = $("#skills-template").html();
  var template = Handlebars.compile(source);

  $('body').append(template(data));
});
ul li {
  list-style-type: upper-roman;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.3/handlebars.min.js"></script>

<script id="skills-template" type="text/x-handlebars-template">
  <h2>Skills - [Block] Each</h2>
  <ul>
    {{#each skills}}
    <li>{{this}}</li>
    {{/each}}
  </ul>

  <h2>Skills - [Helper] SafeString</h2>
  {{scalar_list_safe_string skills}}

  <h2>Skills - [Helper] Raw HTML</h2>
  {{{scalar_list_raw skills}}}
</script>
4
Mr. Polywhirl