gpt4 book ai didi

javascript - 克隆模型后 Backbone 设置会抛出错误吗?

转载 作者:行者123 更新时间:2023-11-30 14:31:42 26 4
gpt4 key购买 nike

我有一些客户模型,如下所示

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 get/set 在克隆后不起作用?

提前致谢

最佳答案

主干获取/设置在 lodash _.cloneDeep 之后不再工作,因为 _.cloneDeep 复制对象的属性(即模型的属性),但不是它的原型(prototype)。请参阅以下示例:

// 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's clone function .

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

关于javascript - 克隆模型后 Backbone 设置会抛出错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51058434/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com