是的,子節必須在創建父節點後總是被調用,無論它是通過直接url還是通過路由器導航訪問。
我的解決方法是在我的應用程序中總是有一個主視圖,路由器始終調用此主視圖。路由器無法訪問其他視圖。在我的主視圖中,我可以處理創建或不創建父視圖的情況。
例如,檢查路由器如何僅調用的MainView有我有創造,如果需要父視圖的方法命名validateCategories:
var MainView = Backbone.View.extend({
id : 'mainView',
categories : null,
events : {
},
initialize : function(){
_.bindAll(this);
},
openSection : function(section){
switch(section){
case 'categories':
this.validateCategories();
break;
case 'products':
this.validateCategories();
this.categories.open(new ProductsView());
break;
}
},
validateCategories : function(){
if(!this.categories){
//we create the parent view only if not yet created
this.categories = new CategoriesView();
}
}
});
var mainView = new MainView();
var RouterClass = Backbone.Router.extend({
routes : {
"categories" : "viewCategories",
"categories/:id/:section" : "viewProducts"
},
viewCategories : function(path) {
mainView.openSection('categories');
},
viewProducts : function(id, section){
mainView.model.set({
productId : id,
section : section,
});
mainView.openSection('products');
}
});
此外,如果你要從頭開始一個新項目不忘記看看這個擴展,幫助你組織你的Backbone.js項目: https://github.com/derickbailey/backbone.marionette