我有一个ViewogView视图,它实际上是一个弹出窗口,如下所示:
var DialogView = Backbone.View.extend({
events : {
'click a._save' : '_save',
'change input._adjust' : '_calculateAdjustedPrice'
},
initialize : function(options) {
this.realModel = options.model;
this.model = (this.realModel).clone();
},
save : function() {
this.model = this.realModel;
}
return DialogView;
});
在另一个视图中,单击alink时会执行以下代码以打开弹出窗口:
var dialogView = new DialogView({
model : dialogModel
});
在这个DialogView中,有一些事件被触发,基于这些事件传递给视图的模型被更改。有一个按钮,保存在视图中,单击时应保持更改的模型不变(无所事事,因为模型值在事件上更改,单击保存时我有更改的模型)。 但是如果在没有单击“保存”的情况下关闭DialogView,则模型中所做的更改不应该保留,并且应该恢复到其原始状态。
我在DialogView代码中使用了Backbone的model.clone()方法。 但似乎clone()并没有创建原始模型的副本,而只是引用相同的模型。每当this.model中的值发生变化时,realModel中的值也会发生变化。我希望在事件被触发时,然后在DialogView模型中更改值,但发送到DialogView的原始模型保持原样,这样如果我关闭DialogView而不保存,则传递给此视图的模型中的值保持不变。
根据BAckbone文档,clone会创建一个新的模型实例,但我上面的研究似乎给出了不同的结果。我在这里理解错了吗?
答案 0 :(得分:0)
传递给DialogView的对话框模型有一个javascript对象。由于clone()不进行深度克隆,因此该对象的引用被传递给克隆模型。因此,当克隆模型中该对象的任何属性发生变化时,它也反映在原始模型中。