我实际上是在JSON对象中执行此操作但是对于这个问题,我将简化。我似乎无法正确构建我的Handlebars模板。这是我传递的对象的示例数组:
var data = {
DocumentInfo: [
{
Category: "General",
DocumentList: [
{
DocumentName: "Document Name 1 - General",
DocumentLocation: "Document Location 1 - General"
},
{
DocumentName: "Document Name 2 - General",
DocumentLocation: "Document Location 2 - General"
}
]
},
{
Category: "Unit Documents",
DocumentList: [
{
DocumentName: "Document Name 1 - Unit Documents",
DocumentList: "Document Location 1 - Unit Documents"
}
]
},
{
Category: "Minutes"
}
]
};
以下是Handlebars模板和Div所在的位置:
<div id="DocumentResults"></div>
<script id="document-template" type="text/x-handlebars-template">
<div>
{{#if DocumentInfo}}
{{#DocumentInfo}}
{{#Category}}
<div class="row">
<div class="col-md-12">
<h2>{{this}}</h2>
{{#DocumentList}}
<p>{{DocumentName}} at {{DocumentLocation}}</p>
{{/DocumentList}}
</div>
</div>
{{/Category}}
{{/DocumentInfo}}
{{else}}
<p>There are no documents available at this time</p>
{{/if}}
</div>
</script>
最后,这是构建Handlebars输出的JavaScript:
var source = $.trim($("#document-template").html());
var template = Handlebars.compile(source);
var $docData = $(template(data));
$("#DocumentResults").empty().append($docData);
问题是,唯一生成的是标题字段。为什么不为每个类别迭代我的其他数组(DocumentList)?而且,我可以获得要显示的标头值的唯一方法是使用{{this}}。如果我用{{Category}}替换它,则不显示任何内容。我不明白我在这里做错了什么。
答案 0 :(得分:0)
检查此jsfiddle: http://jsfiddle.net/KPCh4/
var source = $("#document-template").html();
var template = Handlebars.compile(source);
var html = template(data);
$('#DocumentResults').html(html);
我仍然专注于{{#each}}进行迭代; #
实际上是一个捷径。不要混淆{{Category}}
和{{#Category}}
。前者输出一个属性的值;后者是一个列表(参见#
)。
我让你细化片段:)
希望这有帮助,
R上。