克隆模型后, Backbone 网获取设置引发错误?

rqdpfwrv  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(114)

我有一个客户模型,其中包含以下几个详细信息

customerModel.FIRST_NAME.get('value'); // this will give some name, works fine!

现在,如果我像下面这样克隆模型

var cloneModel = _.cloneDeep(customerModel);
 cloneModel.FIRST_NAME.get('value'); 
 // This gives  Uncaught TypeError: cloneModel.FIRST_NAME.get is not a function

请告诉我我在这里错过了什么?为什么 Backbone 获取/设置不工作后克隆?
先谢谢你

hfyxw5xn

hfyxw5xn1#

Backbone.js 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的模型示例,这可能会导致事件发生问题。

相关问题