突然,当代码被缩小时,我的 BackboneJS 集合在 Chrome 中不起作用。我一直在寻找我们代码中的错误。但是在修复了一些错误之后,当我使用集合时,应用程序继续中断。如果我更改数组的集合,应用程序可以工作,但执行中的下一个集合将再次中断执行。
不得不说,我的申请真的很大。我有一个包含大量信息的模型,它有嵌套的集合和模型。
带有集合的模型示例通常是失败的模型。
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 中会失败。我的意思是当代码被缩小时。一开始我们认为这是一个同步问题,但是在通过数组更改所有集合之后,它在其他不依赖于加载数据的集合中继续失败。总是有错误的行类似于: 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 方法是下一个(与文本错误无关):
addItem: function (item) {
this.get("nodos").add(item);
},
错误总是与一些它为空的数据有关,但堆栈与错误文本无关。当代码被混淆并且我们第一次检测到它时,错误是这样的:
无法读取 null 的属性 1。
真正奇怪的是,当我更改数组的集合时(在该代码中,它将是 mycollec: [] 并 push 而不是 add。)该错误不再出现,并且继续执行,直到遇到另一个类似的集合指令。
我真的很害怕。这就像骨干收藏品被破坏了。它们有时运行良好,并且在应用程序的其余部分中它们永远不会失败。但它与该部分相同(加载大量数据并添加大量 html)破坏了主干,或者可能存在内存泄漏?
我真的迷路了。我很抱歉,因为我第一次写问题时缺少信息。
非常感谢...我真的需要帮助