对于handlbars.js来说相当新,但我的#each功能正常,直到我尝试访问嵌套属性。特别是author.name
<!-- Handlebars.js Blog Template -->
<script id="posts-tpl" type="text/x-handlebars-template">
{{#each post}}
<div class="blog-post">
<h2 class="blog-post-title"><a href="#">{{title}}</a></h2>
<p class="blog-post-meta">{{author.name}}</p>
<div>{{{body}}}</div>
</div>
{{/each}}
</script>
Chrome Javascript控制台会将作者显示为具有属性&#39; name&#39;用正确的数据。
Backbone.js视图似乎也在起作用:
var PostsView = Parse.View.extend({
template: Handlebars.compile($('#posts-tpl').html()),
render: function(){
var collection = { post: this.collection.toJSON() };
this.$el.html(this.template(collection));
}
上有一个完整的例子
答案 0 :(得分:1)
如果你看一下你传递给模板的内容,你就会看到问题。
在render
函数中,尝试检查this.collection.toJSON();
实际上是什么。
基本上,它看起来像这样:
[
{
author: {
__type: "pointer",
className: "_User",
objectId: "JCAjG1AIN0"
},
title: "WTFBBQ",
body: "<p><h3>test</h3> egg on face. This cannot be good. </p>"
}
]
看起来author
缺少name
属性
似乎模型中存在name
属性,但它已嵌套为另一个模型,因此当您致电.toJSON()
时,您将无法获得它。
一种方法是包括author
模型:
var collection = { post: this.collection.toJSON() };
for (var i=0; i<collection.post.length; i++) {
if (collection.post[i].author) {
collection.post[i].author = this.collection.at(i).get('author').toJSON();
}
}
我不熟悉parse.js,所以这可能不是最好的解决方案,但应该可行