Navigate上的Backbone App崩溃

时间:2013-04-09 07:49:05

标签: javascript backbone.js kendo-ui single-page-application

我有一个使用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");

其他想法:

(不确定这些是否是有用的信息,但我认为这可能有助于解释我考虑过的事情,或者是为了帮助我解决这个问题而研究的)

  • 其中两个页面是普通的骨干视图,其中两个是视图    Kendo UI网格(不确定是否相关)。我们的确是    页面转换时刷新网格。
  • 我做了一些记忆    分析和监控应用程序的内存占用,并且有    没有内存泄漏的证据。
  • 当应用程序崩溃时,通常会有    至少有1个ajax调用留下'待定',因为它刚刚发送    在应用程序崩溃之前。
  • 一位测试员认为他看到它崩溃了    按“取消”按钮。这将是一个独特的测试结果,    它很有趣,因为取消按钮不使用    上面显示的事件模式,它只是具有属性    html中的href="#homePage"
  • 有时候,在浏览器闲置一段时间后,错误似乎很容易重现,但并非总是如此。在重度使用时,它有时也是可重复的。 (在这两种情况下,内存分析都没有显示出任何显着效果)。
  • 如果我使用console.log()语句丢弃我的javascript代码,通常会有一个语句总是在崩溃之前打印出来。它是处理我们创建的realWindowResize事件的一些基本代码。但是,如果我删除代码以引发该事件,应用程序仍将崩溃(似乎具有与之前相同的频率),即使该代码不再被触及。这让我相信这是一个奇怪的时间问题......

什么可能导致此类型的崩溃?我有什么想法可以进一步调试这个问题?谢谢你的帮助...

0 个答案:

没有答案