我有两个淘汰赛模型实例(ModelInstance1和ModelInstance2)。对于这两种情况,所有绑定都已应用,并且页面以两种不同的形式加载。
一种形式对用户可见,并允许用户进行内联编辑。对于这种形式,我使用ModelInstance1。
另一种形式是出现在“编辑”按钮单击上的模式形式。此表单使用ModelInstance2。如果用户单击“取消”,则不会将任何值保存到数据库,并且会关闭模式窗体。
现在,我需要在自定义事件中(将其想象为单击按钮)将所有值从一个实例复制到另一个。
当然,我可以手动执行以下操作:
ModelInstance2.FirstName(ModelInstance2.FirstName());
ModelInstance2.LastName(ModelInstance2.LastName());
etc.
但是还有其他方法吗?
考虑到我的模型包含可观察的,可观察的数组,计算的和预订的。
最佳答案
为模型编写构造函数,以便可以将纯对象用作初始化程序。然后您可以通过克隆模型
var modelInstance2=new Model(ko.utils.parseJSON(ko.toJSON(modelInstance1)));
您需要序列化为JSON,然后解析结果以获取深层副本(诸如对象和数组之类的引用类型的属性是实际副本,而不是对原始副本的引用)。如果你做了
var modelInstance2=new Model(ko.toJS(modelInstance1));
那么您将获得一个浅表副本,并且在
modelInstance2
中更改任何引用类型的属性也会在modelInstance1
中对其进行更改。