Backbone get / set больше не работает после lodash _.cloneDeep, потому что _.cloneDeep копирует свойства объекта (то есть атрибутов модели), но не его прототипа. Пример ниже:
// Updating the prototype with new properties
var MyModel = Backbone.Model.extend({
myProperty: 'foo',
myFunc: _.noop
});
var myModel = new MyModel({value: 'someValue'});
var cloneModel = _.cloneDeep(myModel);
console.log(myModel.get);
// ƒ (e){return this.attributes[e]}
console.log(myModel.myProperty);
// 'foo'
console.log(myModel.attributes.value);
// 'someValue'
console.log(cloneModel.get);
// undefined
console.log(cloneModel.myProperty);
// undefined
console.log(cloneModel.attributes.value);
// 'someValue'
Вместо этого вы хотите использовать Функция клона Backbone.Model .
// Updating the prototype with new properties
var MyModel = Backbone.Model.extend({
myProperty: 'foo',
myFunc: _.noop
});
var myModel = new MyModel({value: 'someValue'});
var cloneModel = myModel.clone();
console.log(myModel.get);
// ƒ (e){return this.attributes[e]}
console.log(myModel.myProperty);
// 'foo'
console.log(myModel.attributes.value);
// 'someValue'
console.log(cloneModel.get);
// ƒ (e){return this.attributes[e]}
console.log(cloneModel.myProperty);
// 'foo'
console.log(cloneModel.attributes.value);
// 'someValue'
Это должно быть сделано в любом случае, так как даже если _.cloneDeep работает должным образом, у вас будет два экземпляра моделей с одинаковыми cid, что может вызвать проблемы с обработкой событий.