我是骨干半新人。我尝试将集合绑定到视图,以便在将新模型添加到集合时更新视图。我认为当您使用模型执行此操作时,您可以绑定到模型的更改事件。但是你如何对收藏品做同样的事情?
App.Views.Hotels = Backbone.View.extend({
tagName: 'ul',
render: function() {
this.collection.each(this.addOne, this);
var floorplanView = new App.Views.Floorplans({collection:floorplanCollection});
$('.floorplans').html(floorplanView.render().el);
return this;
},
events: {'click': 'addfloorplan'},
addOne: function(hotel) {
var hotelView = new App.Views.Hotel ({model:hotel});
this.$el.append(hotelView.render().el);
},
addfloorplan: function() {
floorplanCollection.add({"name": "another floorplan"});
}
});
App.Collections.Floorplans = Backbone.Collection.extend({
model: App.Models.Floorplan,
initialize: function () {
this.bind( "add", function() {console.log("added");} );
}
});
点击事件会触发并添加到集合中。但是如何让它更新视图呢?
答案 0 :(得分:3)
您可以收听该集合的add
事件,在将新项目添加到集合时触发。在Backbone的现代版本中,方法listenTo
优先于bind
或on
来监听事件。 (Read de documentation for more info)
例如,在你的情况下,这应该可以解决问题:
App.Views.Hotels = Backbone.View.extend({
initialize: function() {
this.listenTo(this.collection,'add', this.addOne);
},
//rest of code
希望这有帮助!
答案 1 :(得分:2)
这是我很久以前所遵循的一个很好的教程。
An Intro to Backbone.js: Part 3 – Binding a Collection to a View
它可以帮助你定义一个DonutCollectionView,当给出一组甜甜圈时,它会为每个甜甜圈渲染一个UpdatingDonutView。