我正在尝试使用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);
}
答案 0 :(得分:0)
我认为它可能与this.collection的构造函数有关。在创建Collection时,您应该将数组作为第一个参数和对象文字传递,并将选项作为第二个(如果在创建集合类时没有定义它。我在想的是“add”事件在集合上没有被解雇,因此评论没有被呈现。
var Comments = Backbone.Collection.extend({
model: Post
});
this.collection = new Comments(posts)
我猜这些帖子只是一个模型数组