我正在尝试使用以下方法将新项目添加到我的主干集合中:
window.bearList.create({ name: "Tina" } );
这正确地将新项目保存到服务器,因为之后我可以在服务器上看到这个,这就是我想要的。 (我正在使用MongoDB)
{"name":"Tina","_id":"53b41d92b7083d0b00000009","__v":0}
我在bearList ListView中有这个绑定:
initialize: function() {
_.bindAll(this, 'render');
this.collection.bind('add', this.render);
},
问题是上面的代码只是将以下内容添加到我的集合视图中,直到我重新加载页面。
{"name":"Tina"}
我尝试过使用model.save()回调,但我仍然遇到同样的问题。
就像我说的那样,服务器上的一切看起来都很好,一旦我重新加载页面,该集合就会有'Tina'的修正版本。
但由于某种原因,它没有获得ListView的'render'事件的完整模型。我已尝试在ListView渲染方法上单独获取每个模型,但这不起作用,无论如何都是不好的做法。
有人能帮助我吗?
以下是我的完整代码:
window.ListView = Backbone.View.extend({
tagName: 'ul',
className: 'list-group',
initialize: function() {
_.bindAll(this, 'render');
this.collection.bind('add', this.render);
},
render: function(){
this.$el.html(" ");
this.collection.each(function(item){
var listItemView = new ListItemView({ model: item });
this.$el.append(listItemView.render().el);
}, this);
return this;
},
});
window.ListItemView = Backbone.View.extend({
tagName: 'li',
className: 'list-group-item',
initialize:function () {
this.model.bind("change", this.render);
},
render:function () {
console.log(JSON.stringify(this.model.toJSON()));
this.$el.html("<a href='#"+ this.model.hashType + "/"+this.model.get('_id')+"' >" + this.model.get('name') + "</a>");
return this;
}
});
答案 0 :(得分:0)
传递等待:真实。
window.bearList.create({ name: "Tina" }, {wait: true} );
http://backbonejs.org/#Collection-create
如果您想在添加之前等待服务器,请传递{wait:true} 该系列的新模型。
答案 1 :(得分:0)
收听sync
事件,因为add
只会在骨干网中添加您创建的值。 http://backbonejs.org/#Sync
并提示:使用listenTo来使用Backbone的更多功能。 而不是
initialize:function () {
this.model.bind("change", this.render);
},
使用:
initialize:function () {
this.listenTo( this.model, "change", this.render );
},