2012-08-27 38 views
1

在我的路由器中,初始化方法具有相同的代碼(代碼重複3次!)。我有3個路由器,所以如果我想重構代碼(更改名稱等),我將不得不跳轉到3個單獨的文件,並在每個文件上應用更改。如何減少骨幹路由器中的重複代碼

這裏去代碼:

initialize: => 
    # http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/ 
    @contentView = new Backbone.AppView(".js-content") 
    @searchView = new Backbone.AppView(".js-searchbox") 
    @sidebarView = new Backbone.AppView(".js-sidebar") 

是否有某種技術而乾燥該代碼?

某種超類?

我使用coffeescript。

+0

您可以創建一個全局函數,從您的路由器檢查調用:http://stackoverflow.com/questions/11626543/the-best-way-to-share-the-same-functionality-in-backbone/11627466 #11627466 – fguillen

回答

2

你需要創建一個抽象路由器做所需的意見,然後初始化您的特定的路由器必須擴展它:

var BaseRouter = Backbone.Router.extend({ 
    initialize : function(){ 
    console.log('Native Router!'); 
    this.contentView = new Backbone.AppView(".js-content"); 
    this.searchView = new Backbone.AppView(".js-searchbox"); 
    this.sidebarView = new Backbone.AppView(".js-sidebar"); 
    } 
}); 
var RouterOne = BaseRouter.extend({ 
    initialize : function(){ 
    BaseRouter.prototype.initialize.call(this); 
    //specific stuff 
    } 
}); 
var RouterTwo = BaseRouter.extend({ 
    initialize : function(){ 
    BaseRouter.prototype.initialize.call(this); 
    //specific stuff 
    } 
}); 

var router1 = new RouterOne(); 
var router2 = new RouterTwo(); 
1

它看起來像你的DOM的,你是實例在這裏都可以部分被視爲「父視圖」的「子視圖」。通過這個標記,爲什麼你不實例化@pageView = new BB.AppView(...),然後在@ pageView的render()方法繼續並實例化這三個'子類'?