我有一個非常複雜的Backbone應用程序,包含許多視圖/模型和集合。router backbone.js處理事件
當用戶點擊按鈕時,我需要更新多個集合並更新某些視圖。
爲了管理集合我已經處理了我的路由器中的大部分事件。事件的順序如下:
用戶點擊一個鏈接/按鈕,查看觸發事件:如有必要,
this.model.trigger('someEvent');
模型聽的情況下,更新自己,通過我的eventbus
通知路由器eventbus.trigger('globalEVent');
我的路由器正在偵聽全局事件,從緩存存儲中獲取集合/模型並更新必要的集合和模型。
這真的很好,到目前爲止的工作,但
我有太多的事件和我的路由器代碼變得難以管理。我的問題是有辦法處理路由器之外的事件,並仍然訪問路由器內的方法?我的方法是否正確或者是否有更優雅的解決方案,我沒有考慮過?
更新:
以下是我現在就做:
在路由器我把這個方法在我的初始化():
registerModules : function() {
var self = this;
Backbone.trigger(Events.RegisterModule, function(moduleRoutes) {
_.each(moduleRoutes, function(moduleRoute) {
self.routeDetails[moduleRoute.name] = {
buildPageUrl: moduleRoute.buildPageUrl,
fragment : moduleRoute.fragment
}
self.route(moduleRoute.fragment, moduleRoute.name, moduleRoute.action);
});
});
},
然後,我有定期自我EXEC塊對於每個自我註冊的模塊/頁面(簡化版):
(function() {
var module = {
loadAndDisplay: function() {},
saveAndContinue: function(model) {
Backbone.trigger(Events.ChangePage, model.get('nextPage'));
},
registerEvents: function() {},
_init: function() {
module.registerEvents();
var self = this,
routes = [{
fragment: Constants.FRAGMENT,
name: Constants.PAGE_NAME,
buildPageUrl: function() {
return Constants.FRAGMENT;
},
action: module.loadAndDisplay
}];
Backbone.on(Events.RegisterModule, function(registerCallback) {
registerCallback.call(registerCallback, routes);
});
}
};
module._init();
})();
當然你的路由器腳本應該在你的模塊代碼之前加載。它適用於我的需求。採用這種設計,我已將路由器/模塊完全分開,並且彼此之間也不知情。每個將處理它自己的事件/數據等共享邏輯進入路由器。
您需要訪問哪些方法? – jakee