我試圖創建兩個視圖並在不同情況下更改集合。我不知道如何設置this.collection.bind,因此它會在每次集合更改時引發事件呈現。主幹不發射呈現事件
有3種情況,我希望視圖BusinessListView
火render
this.businesslist.collection = new Businesses([{ name: '1'}, { name: '2' }]);
this.businesslist.set();
這就要求this.collection = new Businesses([{ name: '3'}, { name: '4' }]);
this.search_location = new SearchLocation();
這是不同的看法,然後把收集來查看BusinessListView
我曾期待看到數據在控制檯上1和2,它不起作用。如果手動添加.render(),我可以看到集合已更改。你能解釋一下這是如何工作的嗎?
UPDATE
感謝Alex這是完全可行的解決方案:
http://jsfiddle.net/feronovak/RAPjM/
var App = {
run: function() {
this.businesslist = new BusinessListView();
this.businesslist.collection = new Businesses([{ name: '1'}, { name: '2' }]);
// this.businesslist.render(); // uncomment to see collection change
this.businesslist.set();
this.search_location = new SearchLocation();
}
};
Business = Backbone.Model.extend({});
Businesses = Backbone.Collection.extend({
model: Business
});
BusinessListView = Backbone.View.extend({
initialize: function(options) {
this.collection = new Businesses();
this.collection.bind("reset", this.render(), this);
},
render: function() {
console.log(this.collection.toJSON());
},
set: function()
{
this.collection = new Businesses([{ name: '3'}, { name: '4' }]);
// this.render(); // uncomment to see collection change
}
});
SearchLocation = Backbone.View.extend({
el: "#search",
initialize: function() {
this.sendData();
},
sendData: function() {
// Send [{ name: '5'}, { name: '6' }] to this.businesslist = new Businesses([{ name: '5'}, { name: '6' }]);
}
});
$(document).ready(function(e) {
App.run();
});
不改變收集調用復位事件?我希望如果我手動更改集合(僅在此示例中),則會調用渲染。 – feronovak 2013-03-27 13:20:36
刪除我最後的評論,因爲它是不正確的,我猜。你的jsfiddle顯示渲染方法正在運行。 – Loamhoof 2013-03-27 13:21:40
通過創建一個新對象,偵聽器消失。所以你只是不聽新的。 – Loamhoof 2013-03-27 13:25:59