我有一個Backbone.Marionette應用程序,帶有一個模塊,可在初始化時通過socket.io獲取模型數據。我啓動路由器這樣的:獲取數據後啓動路由器
App.on('initialize:after', function(){
Backbone.history.start();
});
的問題是,在路由器啓動之前的數據被取出,所以我認爲不會呈現。
在頁面加載模型被提取後,我應該怎樣做才能讓我的視圖顯示?
我有一個Backbone.Marionette應用程序,帶有一個模塊,可在初始化時通過socket.io獲取模型數據。我啓動路由器這樣的:獲取數據後啓動路由器
App.on('initialize:after', function(){
Backbone.history.start();
});
的問題是,在路由器啓動之前的數據被取出,所以我認爲不會呈現。
在頁面加載模型被提取後,我應該怎樣做才能讓我的視圖顯示?
你的問題似乎並沒有進行相關的路由器:
更新
檢測多個取的成功。路由器簡單地解析URL以調用正確的操作。如果您的視圖不呈現,這意味着您的應用程序沒有正確調用控制器操作。
您應該等待視圖內的數據(不論路由器狀態如何)。一種方便的方法是使用jQuery延遲。你可以在我的一些博客文章關於他們的記載:
此外,你可以看到一個用在這裏:https://github.com/davidsulc/marionette-gentle-introduction/blob/master/assets/js/apps/contacts/show/show_controller.js此代碼是從我book on Marionette,並採用取推遲/承諾在數據被「提取」時顯示加載視圖。
刪除
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();
問題是我有幾個模塊提取不同的數據。我無法在每個成功回調中放置'Backbone.history.start()',我想保留它在應用程序級別 –
這一切都取決於您的應用程序的結構。您可以檢測每個獲取成功,然後調用它。 –
好的,我如何檢測應用程序中每個模塊的獲取成功? –