问题
I'm actually doing this in a JSON object but for this question, I will simplify. I can't seem to get my Handlebars template to build correctly. Here is a sample array of objects that I am passing:
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"
}
]
};
Here is the Handlebars template and Div where it's going:
<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>
Finally, here is the JavaScript that builds the Handlebars output:
var source = $.trim($("#document-template").html());
var template = Handlebars.compile(source);
var $docData = $(template(data));
$("#DocumentResults").empty().append($docData);
The problem is, the only thing that is generated are the header fields. Why won't it iterate over my other array (DocumentList) for each Category? And, the only way I can get the header values to display is to use {{this}}. If I replace it with {{Category}} nothing displays. I can't see what it is that I'm doing wrong here.
回答1:
Check this jsfiddle: http://jsfiddle.net/KPCh4/
var source = $("#document-template").html();
var template = Handlebars.compile(source);
var html = template(data);
$('#DocumentResults').html(html);
I were still focused on {{#each}} for iteration; # is a shortcut actually. Do not confuse {{Category}} and {{#Category}}. The former output a property's value; the latter is a list (see the #).
I let you fine-grained the snippet :)
Hope this helps,
R.
来源:https://stackoverflow.com/questions/19014072/iterating-over-array-of-objects-in-handlebars