无法在Backbone View中渲染Backbone集合

时间:2014-12-02 23:44:28

标签: javascript backbone.js

我正在尝试使用Backbone.View呈现集合的视图。但是我无法渲染注释视图以将各个注释显示为注释视图中的列表。仅呈现评论表单。当从地址栏访问集合的url时,返回下面的数组,因为我已经将它写在带有express的服务器端代码上。

这里有什么问题我无法解决?使用此代码实现它似乎很自然,但可以肯定的是我遗漏了一些东西。一般的问题是我被困在这么详细的点,虽然我可以学习说mvc框架,Backbone,Node,express等。

CommentsView:

var CommentsView = Backbone.View.extend({
    initialize: function (options) {
        this.post = options.post;
        this.collection = new Comments({post: this.post});//injecting collection from this views options, was injected to this view form router.
        this.collection.on('add', this.addComments, this);
     },
     addComments: function (comment) {
         this.$el.append(new CommentView({ model: comment }).render().el);
     },
     render: function () {
       this.$el.append("<h2> Comments </h2>");
       this.$el.append(new CommentFormView({post: this.post}).render().el);
       return this;
    }
});

这是从地址栏访问集合的url时返回的数组:

[
  {
    "_id": "547e36df0ca19b2c1a6af910",
    "postId": "547d00e30ca19b2c1a6af90b",
    "name": "comment one",
    "date": "Mon 21 Oct 2014",
    "text": "gibberjabber"
  }
]

路由方法,当相关帖子的评论路由被路由到:

comments: function(_id) {
    var csv = new CommentsView({ post: this.posts.findWhere( {_id: _id} ) });

    this.main.html(csv.render().el);
}

1 个答案:

答案 0 :(得分:0)

我认为它可能与this.collection的构造函数有关。在创建Collection时,您应该将数组作为第一个参数和对象文字传递,并将选项作为第二个(如果在创建集合类时没有定义它。我在想的是“add”事件在集合上没有被解雇,因此评论没有被呈现。

var Comments = Backbone.Collection.extend({
  model: Post
});

this.collection = new Comments(posts)

我猜这些帖子只是一个模型数组