gpt4 book ai didi

javascript - 一个实例的对象和数组被 Backbone 模型的新实例引用

转载 作者:行者123 更新时间:2023-11-28 02:09:51 26 4
gpt4 key购买 nike

我正在使用主干模型,并且非常惊讶地发现在主干模型的特定实例中设置的 JSON 对象和数组也可以被其他实例访问。

 var myModel = Backbone.Model.extend({
defaults: {
exp: [],
name: '',
json: { }
},

getExp: function() {
return this.get('exp');
},

getJSON: function() {
return this.get('json');
}
});

var m1 = new myModel();
var experiences = m1.getExp();
experiences.push('arrayitem1');
experiences.push('arrayitem2'); //Setting values for array of m1

m1.set('name', 'my name');

var json = m1.getJSON();
json.key = 'somevalue';

var m2 = new myModel();
console.log(m1.attributes);
console.log(m2.attributes);

输出:

{"exp": ["arrayitem1", "arrayitem2"], "json": {"key": "somevalue"}, "name": "my name"}
{"exp": ["arrayitem1", "arrayitem2"], "json": {"key": "somevalue"}, "name": ""}

m2的键值对

  • m2 中的名称属性是默认的。 (正如预期的那样)
  • exp :与 m1 相同(不是预期的)
  • json:与 m1 相同(不需要)

JSBIN DEMO

我无法解释这种行为。

更新

我想知道应该如何解决。我添加了一个答案(有点黑客),因为它对我有用,但我不知道它是否正确。也很想知道这种行为的原因。我做错了什么或者这是 Backbone 中的某种错误。

最佳答案

我用过一个 hack 来解决这个问题。在 initialize 方法中重置 Backbone 模型中用作属性的所有对象和数组。

var myModel = Backbone.Model.extend({
defaults: {
exp: [],
name: '',
json: { }
},

getExp: function() {
return this.get('exp');
},

getJSON: function() {
return this.get('json');
},

initialize: function() {
this.set('exp', []);
this.set('json', {});
}
});

var m1 = new myModel();
var experiences = m1.getExp();
experiences.push('arrayitem1');
experiences.push('arrayitem2');

m1.set('name', 'my name');
var json = m1.getJSON();
json.key = 'somevalue';

var m2 = new myModel();
console.log(m1.attributes);
console.log(m2.attributes);

Working Demo at JSBIN

关于javascript - 一个实例的对象和数组被 Backbone 模型的新实例引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17271474/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com