Pregunta

Estoy trabajando con modelos Backbone.js, así que no sé si mi pregunta es particular de las asas forma la columna vertebral de clonación o si se aplica a javascript en general. Básicamente, lo que necesito para clonar un modelo que tiene una propiedad de atributo asignado un objeto. El problema es que cuando pongo al día el padre o el atributo del clon, el otro modelo también se actualiza. Aquí está un ejemplo rápido:

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))

que registra el siguiente:

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

Yo preferiría clon a tal que b no estar haciendo referencia a cualquiera de sus atributos. Cualquier ayuda sería muy apreciada.

¿Fue útil?

Solución

Backdone no hace un profundo-clon, pero sólo atributos clon de primer nivel. Usted tiene que clonar los valores usted mismo (cuando es un hash o matriz para exemple).

Otros consejos

Usted podría hacer

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

Adaptado de esta respuesta: Cómo clonar una colección columna vertebral

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/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top