2013-10-21 30 views
0

我有一個Backbone.Marionette應用程序,帶有一個模塊,可在初始化時通過socket.io獲取模型數據。我啓動路由器這樣的:獲取數據後啓動路由器

App.on('initialize:after', function(){ 
    Backbone.history.start(); 
}); 

的問題是,在路由器啓動之前的數據被取出,所以我認爲不會呈現。

在頁面加載模型被提取後,我應該怎樣做才能讓我的視圖顯示?

回答

0

你的問題似乎並沒有進行相關的路由器:

更新

檢測多個取的成功。路由器簡單地解析URL以調用正確的操作。如果您的視圖不呈現,這意味着您的應用程序沒有正確調用控制器操作。

您應該等待視圖內的數據(不論路由器狀態如何)。一種方便的方法是使用jQuery延遲。你可以在我的一些博客文章關於他們的記載:

此外,你可以看到一個用在這裏:https://github.com/davidsulc/marionette-gentle-introduction/blob/master/assets/js/apps/contacts/show/show_controller.js此代碼是從我book on Marionette,並採用取推遲/承諾在數據被「提取」時顯示加載視圖。

0

刪除

Backbone.history.start(); 

從這裏把它取的成功回調。

您可以在開始時始終初始化路由器,但實際上history.start()執行重定向。

//Declare an array 
App.modules = []; 

//When you initialise each module, push it to array 
App.modules.push(this.id); 

//Declare a counter for modules 
App.moduleCounter = 0; 

var startHistory = function() { 
    App.moduleCounter++;   

    if(App.modules.length === App.moduleCounter) { 
      Backbone.history.start(); 
     }  
} 

//Call this function on each success 
startHistory(); 
+0

問題是我有幾個模塊提取不同的數據。我無法在每個成功回調中放置'Backbone.history.start()',我想保留它在應用程序級別 –

+0

這一切都取決於您的應用程序的結構。您可以檢測每個獲取成功,然後調用它。 –

+0

好的,我如何檢測應用程序中每個模塊的獲取成功? –