我正在使用主干模型,并且很惊讶地看到设置在我的主干模型的特定实例中的 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 演示
我无法解释这种行为。
更新
我想知道我应该如何解决它。我添加了一个答案(Kinda hacky),因为它对我有用,但我不知道它是否正确。也很想知道这种行为的原因。我做错了什么,或者这是 Backbone 中的某种错误。