我有两个淘汰赛模型实例(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中对其进行更改。

09-12 01:12