我有一个使用backbone.js构建的单页面应用程序,其中包含多个视图,并且在视图之间转换时应用程序经常崩溃。当应用程序崩溃时,浏览器本身不会崩溃,只有应用程序崩溃,因此浏览器会显示Chrome的“糟糕”屏幕等消息。此崩溃迫使用户使用他的“重新加载”来刷新页面,因此如果他们没有保存,他们正在处理的任何内容都会丢失。崩溃是间歇性的,难以重现。
要在没有导航选项卡的情况下完成这些转换,我在路由器中创建一个事件聚合器(或简单的“状态机”),如下所示:
eventAggregator: _.extend({}, Backbone.Events),
我还设置路由器以侦听多个事件,例如:
this.eventAggregator.on("moveToPage1", function () {
this.Navigate("page1", {trigger: true});
});
this.eventAggregator.on("moveToPage1", function () {
this.Navigate("page2", {trigger: true});
});
所以路线看起来像这样:
routes: {
"page1": "viewPage1",
"page2": "viewPage2",
},
当导航这些路线时,我会做一些基本的东西来隐藏模态和显示/隐藏视图,并刷新一些视图上的一些kendoUI网格:
viewPage1: function(){
$(window).trigger('closeModal');
$(window).trigger('minimize');
/* hide all the views */
_.each(this.views, function (view) {
view.$el.hide();
});
page1.$el.show();
//for Kendo UI grids
$(window).trigger("realWindowResize");
$(window).trigger("refreshGrid");
}
然后我将'eventAggregator'对象传递给每个视图。然后视图可以为按钮触发事件连接,触发事件如下:
eventAggregator.trigger("moveToPage2");
href="#homePage"
。console.log()
语句丢弃我的javascript代码,通常会有一个语句总是在崩溃之前打印出来。它是处理我们创建的realWindowResize
事件的一些基本代码。但是,如果我删除代码以引发该事件,应用程序仍将崩溃(似乎具有与之前相同的频率),即使该代码不再被触及。这让我相信这是一个奇怪的时间问题...... 什么可能导致此类型的崩溃?我有什么想法可以进一步调试这个问题?谢谢你的帮助...