我正在使用backbone.js型号,所以我不知道我的问题是否特定于骨干处理克隆的方式,还是通常适用于JavaScript。基本上,我需要克隆一个具有分配给对象的属性属性的模型。问题在于,当我更新父或克隆的属性时,也会更新另一个模型。这是一个快速示例:

var A = Backbone.Model.extend({});
var a = new A({'test': {'some': 'crap'}});
var b = a.clone();

a.get('test')['some'] = 'thing';
// I could also use a.set() to set the attribute with the same result

console.log(JSON.stringify(a))
console.log(JSON.stringify(b))

记录以下内容:

{"test":{"some":"thing"}}
{"test":{"some":"thing"}}

我更喜欢克隆 一个 这样 b 不会引用其任何属性。任何帮助,将不胜感激。

有帮助吗?

解决方案

Backdone不做深键,而只能克隆第一级属性。您必须自己克隆值(当它是一个景象的哈希或数组时)。

其他提示

你可以做

var A = Backbone.Model.extend({});
var a = new A({'test': {'some': 'stuff'}});
var b = new A(a.model.toJSON());

从这个答案中改编出来: 如何克隆骨干收藏

var A = Backbone.Model.extend({});
var a = new A({'test': {'some': 'stuff'}});
var b = a.clone();

b.attributes = $.extend(true, {}, b.attributes);

// try to overwrite "some" without affecting "a" model
var someStuff = {'test': {'some' : 'other stuff'}};
b.set(someStuff);

console.log(a.toJSON());
console.log(b.toJSON());

http://jsfiddle.net/rlwzm/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top