Backbone.js 一个实例中的主干模型更改数据会影响另一个实例
我只是在使用Backbone.Model时遇到了一个奇怪的错误 因此,我的模型声明类似于:Backbone.js 一个实例中的主干模型更改数据会影响另一个实例,backbone.js,pass-by-reference,javascript,backbone-model,Backbone.js,Pass By Reference,Javascript,Backbone Model,我只是在使用Backbone.Model时遇到了一个奇怪的错误 因此,我的模型声明类似于: var MyMode = Backbone.Model.extend({ defaults:{ 'someList': [] }, initialize: function(){ _.bindAll(this, 'toString', 'castFromString'); }, toString: function(){ return
var MyMode = Backbone.Model.extend({
defaults:{
'someList': []
},
initialize: function(){
_.bindAll(this, 'toString', 'castFromString');
},
toString: function(){
return this.get('hierarchyNameList').join('+');
},
castFromString: function(str){
var strArray = [], index = 0;
if (str) {
strArray = str.split('+');
}
for (index = 0; index < strArray.length; index++){
this.get('hierarchyNameList').push(strArray[index]);
}
}
});
实际的代码比这更复杂,但我想这就是我可能做错的地方,有没有关于为什么会发生这种情况的建议?提前谢谢 问题在于您的默认设置
defaults:{
'someList': []
},
JavaScript中的对象是通过引用而不是通过值传递的。这意味着您没有明确指定someList
值的所有实例都将共享在上面的defaults
定义中创建的数组。要避免这种情况,您可以将默认值定义为函数:
defaults: function () {
return { 'someList': [] };
},
这将为
MyModel
的每个实例创建新数组,因此它们不会共享同一个数组。问题在于您的默认设置
defaults:{
'someList': []
},
JavaScript中的对象是通过引用而不是通过值传递的。这意味着您没有明确指定someList
值的所有实例都将共享在上面的defaults
定义中创建的数组。要避免这种情况,您可以将默认值定义为函数:
defaults: function () {
return { 'someList': [] };
},
这将为
MyModel
的每个实例创建新数组,因此它们不会共享同一个数组。问题在于您的默认设置
defaults:{
'someList': []
},
JavaScript中的对象是通过引用而不是通过值传递的。这意味着您没有明确指定someList
值的所有实例都将共享在上面的defaults
定义中创建的数组。要避免这种情况,您可以将默认值定义为函数:
defaults: function () {
return { 'someList': [] };
},
这将为
MyModel
的每个实例创建新数组,因此它们不会共享同一个数组。问题在于您的默认设置
defaults:{
'someList': []
},
JavaScript中的对象是通过引用而不是通过值传递的。这意味着您没有明确指定someList
值的所有实例都将共享在上面的defaults
定义中创建的数组。要避免这种情况,您可以将默认值定义为函数:
defaults: function () {
return { 'someList': [] };
},
这将为
MyModel
的每个实例创建新的数组,因此它们不会共享同一个数组。非常感谢!我真的不知道默认值在主干模型中是如何工作的,如果您不确定主干源代码是如何工作的(尽管我不确定这是否有助于解决这个问题),那么深入研究主干源代码是值得的。它的文档记录得非常好,很容易理解。非常感谢!我真的不知道默认值在主干模型中是如何工作的,如果您不确定主干源代码是如何工作的(尽管我不确定这是否有助于解决这个问题),那么深入研究主干源代码是值得的。它的文档记录得非常好,很容易理解。非常感谢!我真的不知道默认值在主干模型中是如何工作的,如果您不确定主干源代码是如何工作的(尽管我不确定这是否有助于解决这个问题),那么深入研究主干源代码是值得的。它的文档记录得非常好,很容易理解。非常感谢!我真的不知道默认值在主干模型中是如何工作的,如果您不确定主干源代码是如何工作的(尽管我不确定这是否有助于解决这个问题),那么深入研究主干源代码是值得的。它的文档记录得非常好,很容易理解。