2012-05-23 81 views
3

我希望多個路由器可以在一個頁面上爲模塊化生活。我在不同的js文件中初始化$(document).ready()上的路由器。當我只有一臺路由器工作正常時,因爲我可以在初始化路由器後立即調用History.start(),但現在我有多個可以從不同文件初始化的路由器,我不知道何時撥打History.start()Backbone> Multiple Routers and History.start

例如:

<script src="router1.js" type="text/javascript"></script> 
<script src="router2.js" type="text/javascript"></script> 

在router1.js:

$(document).ready(function(){ 
    new Core.Routers.Router1() 
}); 

,同樣也ROUTER2。

最好的解決方案只是添加一個新的$(document).ready(),在頁面末尾調用History.start()?我不認爲DOC文件就緒呼叫是阻塞的,所以不會引入競爭狀態,其中所有路由器在History.start()被調用時可能尚未初始化。

回答

8

您只需要在您的應用程序中調用Backbone.history.start()一次,並且調用它時唯一的標準是至少有一個路由器必須已經實例化。

所以,你可以很容易地做到這一點:


$(function(){ 
    new MyRouter(); 
    Backbone.history.start(); 
}); 


$(function(){ 
    new AnotherRouter(); 
}); 


$(function(){ 
    new AndMoreRouters(); 
}); 

我做類似的事情與定期路由器,我經常啓動該頁面已經被加載後不久新的路由器和用戶交互與頁面。

FWIW不過,你可能會感興趣的,我有初始化我Backbone.Marionette插件的想法和記錄的這個博客帖子的一部分:http://lostechies.com/derickbailey/2011/12/16/composite-javascript-applications-with-backbone-and-backbone-marionette/

+0

啊[骨幹文檔](http://documentcloud.github.com/backbone/#History-start)說,一旦你已經建立了所有的路由器就打電話給它。之後我會嘗試設置路由器。謝謝! –

0

您可能還可以檢查Backbone.History.started ...

var Router = Backbone.Router.extend({ 
     routes: { 
      '': 'load' 
     }, 
     initialize: function() { 

     }, 
     load: function() { 

     } 
    }); 

    $(function() { 
     new Router(); 
     if (!Backbone.History.started) { 
      Backbone.history.start(); 
     } 
    }); 

它最近被添加到拉請求中。

一定要看看Derick的Marionette插件,它非常棒。

相關問題