获取数据后启动路由器

时间:2013-10-21 12:57:21

标签: javascript backbone.js asynchronous marionette

我有一个Backbone.Marionette应用程序,其模块在初始化时通过socket.io获取模型数据。我用这个启动路由器:

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

问题是路由器在获取数据之前启动,因此我的视图不会呈现。

在页面加载后获取模型后,我应该如何显示我的视图?

2 个答案:

答案 0 :(得分:0)

删除

Backbone.history.start();

从这里开始并将其置于fetch的成功回调中。

您始终可以在开始时初始化路由器,但实际上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();

答案 1 :(得分:0)

您的问题似乎与路由器无关。路由器只是解析URL以调用正确的操作。如果您的视图未呈现,则表示您的应用程序未正确调用控制器操作。

您应该等待视图中的数据(无论路由器状态如何)。一种方便的方法是使用jQuery延迟。您可以在我的一些博客文章中阅读它们:

此外,您可以在此处看到一个用途:https://github.com/davidsulc/marionette-gentle-introduction/blob/master/assets/js/apps/contacts/show/show_controller.js此代码来自我的book on Marionette,并使用延迟/承诺在“获取”数据时显示加载视图。 / p>