我有一个Backbone.Marionette应用程序,其模块在初始化时通过socket.io获取模型数据。我用这个启动路由器:
App.on('initialize:after', function(){
Backbone.history.start();
});
问题是路由器在获取数据之前启动,因此我的视图不会呈现。
在页面加载后获取模型后,我应该如何显示我的视图?
答案 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>