Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 突然,我的BackboneJS系列不再';当代码缩小时,不能在Chrome中工作_Javascript_Backbone.js_Collections - Fatal编程技术网

Javascript 突然,我的BackboneJS系列不再';当代码缩小时,不能在Chrome中工作

Javascript 突然,我的BackboneJS系列不再';当代码缩小时,不能在Chrome中工作,javascript,backbone.js,collections,Javascript,Backbone.js,Collections,当代码缩小时,我的BackboneJS集合突然无法在Chrome中工作。 我一直在搜索代码中的错误。但是在修复了一些bug之后,当我使用集合时,应用程序继续崩溃。如果我更改数组的集合,应用程序将工作,但执行中的下一个集合将再次剪切执行 我不得不说我的申请真的很大。我有一个包含大量信息的模型,它有嵌套的集合和模型 具有集合的模型的示例通常是失败的模型 var MyCollection = Backbone.Collection.extend({ model: VinculacionesGr

当代码缩小时,我的BackboneJS集合突然无法在Chrome中工作。 我一直在搜索代码中的错误。但是在修复了一些bug之后,当我使用集合时,应用程序继续崩溃。如果我更改数组的集合,应用程序将工作,但执行中的下一个集合将再次剪切执行

我不得不说我的申请真的很大。我有一个包含大量信息的模型,它有嵌套的集合和模型

具有集合的模型的示例通常是失败的模型

    var MyCollection = Backbone.Collection.extend({ model: VinculacionesGrafo });

    var MyParentModel= Backbone.Model.extend({
        defaults: function () {
            return {
                mycollec: new MyCollection,
                finDeCarga: false
            };
        },

        initialize: function () {
            _.bindAll(this);
        },
        ....
        loadData: function () {
                var that = this;
                sendRequest({
                    type: "post",
                    url: ..,
                    dataType: "xml",
                    data: { ... },
                    success: this.success
                });
        },
        success: function(data) {
            model = new ChildModel;
            that.get("mycollec").add(model);
        }
它可以在Firefox、Internet Explorer中正常工作。。。但有时在Chrome中,当代码准备生产时,它会失败。我的意思是当代码缩小时。在beggining,我们认为这是一个同步问题,但在通过数组更改所有集合之后,在其他不依赖于加载数据的集合中,它继续失败。所有带有错误的行都是这样的:that.get(“mycollec”).add(model);堆栈是下一个:

 TypeError: Cannot read property 'operaciones' of null
     at h.extend.get 
     at h.extend.set 
     at h.extend.add
     at g.Model.extend.addItem 
     at f.extend.cargarNodosIniciales
下一个是addItem方法(与文本错误无关):

所有情况下,错误都与它为null的某些数据相关,但堆栈与错误文本无关。当代码模糊时,我们第一次检测到它,错误如下:

无法读取null的属性1

真正奇怪的是,当我更改数组的集合时(在该代码中,它将是mycollec:[]和push,而不是add)。错误不再出现,执行将继续,直到出现另一个类似的集合指令

我真的很害怕。这就像主干收藏被破坏了一样。它们有时工作得很好,在应用程序的其余部分,它们从未失败过。但它同样是一个部分(加载大量数据并添加大量html)破坏了主干,或者可能是内存泄漏

我真的迷路了。我很抱歉,因为我第一次写这个问题的时候缺少信息


先谢谢你。。。我确实需要帮助

问题是您将成功函数定义错误。您刚刚执行了函数成功,并实际全局定义了它,而不是在Backbone.Model.extend参数中定义它

loadData:function(){...},
success:function(data){....},
当成功回调被触发时。它在视图中查找成功事件作为方法。但你一开始还没有定义它。您刚刚在
localData
的范围内创建了一个函数

应该是这样的
success:success

loadData: function () {
    var that = this;
    sendRequest({
        type: "post",
        url: ..,
        dataType: "xml",
        data: {...
        },
        success: this.success
    });

},
success: function (data) {
    model = new ChildModel;
    that.get("mycollec").add(model);
}

现在该方法可用于视图。所以
success:this.success
对这个案例有效。

我终于找到了解决方案@github的philfreo在主干存储库中回答了我的问题

这似乎只发生在chrome的第28版和第29版(beta版)中。在30版本(金丝雀)中,@philfreo说它有效

他建议我们执行以下3个选项中的任意一个: +使用未统一的Backbonjs +使用Chrome 30代替以前的版本 +缩小之前在Backbonejs代码中应用修补程序

另一种选择是混淆代码,而不是缩小代码。我把缩小和模糊的代码,并作出美化,然后我取代了源代码,它的工作。我不确定谷歌闭包中有哪些选项可以实现这一点。但这是可能的


这个补丁可以工作(第三个选项)!所以,如果有人犯了这个错误,我希望能帮助他。这是一个非常模糊的错误,可能需要很多时间才能找到解决方案。

你有什么错误?我添加了它,很抱歉我忘了你有地方放置缩小版,以便我们可以复制吗?我认为缩小版没有帮助。我不确定我是否可以分享缩小版。是公司寄来的。您无法尝试该应用程序,因为它将要求您提供用户帐户。我还能为你做些什么呢?你还认为缩小版会有帮助吗?很抱歉,这不是问题所在。我写得太快了。就在那一刻,我就要失业了。我将编辑这个问题,并添加更多细节。我有几种这种结构的模型。使用this.get(“集合”)创建模型。有些人在方法内部成功,有些人在外部成功。我在这里编辑了它,但我忘了把它移到外面。所有这些模型在Chrome中执行的一段时间内都会失败。只是在Chrome中,有时,所以调试这个问题非常困难。很抱歉,这不是问题所在。我写得太快了。就在那一刻,我就要失业了。我将编辑这个问题,并添加更多细节。我有几种这种结构的模型。使用this.get(“集合”)创建模型。有些人在方法内部成功,有些人在外部成功。我在这里编辑了它,但我忘了把它移到外面。所有这些模型在Chrome中执行的一段时间内都会失败。只是在Chrome中,有时,所以很难调试这个问题。
success: this.success
loadData: function () {
    var that = this;
    sendRequest({
        type: "post",
        url: ..,
        dataType: "xml",
        data: {...
        },
        success: this.success
    });

},
success: function (data) {
    model = new ChildModel;
    that.get("mycollec").add(model);
}