你可以做一個簡單的模型來保存應用程序的狀態,你不需要任何幻想,只是數據包實現普通主幹事件方法:
var AppState = Backbone.Model.extend({});
var app_state = new AppState();
然後流派列表視圖會監聽點擊事件(因爲你已經擁有),並設置當前類型的應用狀態模型當有人改變它:
var Genres = Backbone.View.extend({
//...
choose: function(ev) {
// This would be the click handler for the genre,
// `.html()` is just for demonstration purposes, you'd
// probably use a data attribute in real life.
app_state.set({genre: $(ev.target).html() });
},
});
的各個流派的觀點將用於偵聽應用狀態模型"change:genre"
事件並隨着流派的變化而作出反應:
var Genre = Backbone.View.extend({
initialize: function() {
_.bindAll(this, 'change_genre');
app_state.on('change:genre', this.change_genre);
},
//...
change_genre: function() {
// Refill the genre display...
}
});
演示:對於任何數據http://jsfiddle.net/ambiguous/mwBKm/1/
可以讓模特你想和模型都是在骨幹數據事件工作的一種便捷方式。作爲額外的好處,這種方法使得持久化應用程序狀態變得相當容易:只需將通常的Backbone持久性支持添加到AppState
即可。
如果你只需要一個簡單的事件總線圍繞推動非數據事件,您可以使用骨幹Events
方法來構建一個簡單的事件聚合:
app.events = _.extend({}, Backbone.Events);
然後,假設你有一個全球性的app
命名空間,你可以說這樣的事情:
app.events.on('some-event', some_function);
和
app.events.trigger('some-event', arg1, arg2, ...);
謝謝,這是一個很好的答案! 我正在使用RequireJS進行依賴關係,但我想我只是在路由器中創建AppState模型,並在其中創建視圖並將其添加爲視圖的依賴關係 - 持久性是一個很棒的副作用! – wannabeartist
@wannabeartist:您可以根據需要將其他位的應用程序級數據添加到AppState中(當前軌道,搜索過濾器......),並且所有內容都將整齊地排列。 –