Parse Backbone.js Handlebars [Object object]

时间:2015-04-19 17:45:24

标签: backbone.js handlebars.js

对于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));
}

我在http://picze.co/blog

上有一个完整的例子

1 个答案:

答案 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,所以这可能不是最好的解决方案,但应该可行