Knockout.js 淘汰js映射插件不工作

Knockout.js 淘汰js映射插件不工作,knockout.js,Knockout.js,我正在开发knockout js框架,并使用mapping plugin使用之前保存的数据更新视图模型,如下面的fiddle中所述 HTML: 但是每当我使用unmap选项时,使用ko.mapping插件的viewmodel的计算可观测值都不会更新 情况是这样的。 1.姓名='Bob123',姓氏='Smith' 2.现在单击“ClickhereforoutputJSON”按钮,以便临时保存数据 3.单击“单击此处加载旧数据”现在我们可以获得旧数据firstname='Bob123',last

我正在开发knockout js框架,并使用mapping plugin使用之前保存的数据更新视图模型,如下面的fiddle中所述

HTML:

但是每当我使用unmap选项时,使用ko.mapping插件的viewmodel的计算可观测值都不会更新

情况是这样的。 1.姓名='Bob123',姓氏='Smith' 2.现在单击“ClickhereforoutputJSON”按钮,以便临时保存数据 3.单击“单击此处加载旧数据”现在我们可以获得旧数据firstname='Bob123',lastname='Smith',但当我更改这些字段中的任何一个firstname或last时,它不会更新全名


有人能告诉我如何使计算字段在unmap上工作吗?

出现此问题的原因是您的视图模型绑定到可观察值的特定实例。名、姓等

因此,当您重新加载数据时,我建议进行以下更改:

viewModel.myviewmodel.firstName(updatedData[0].firstName);

viewModel.myviewmodel.firstName(updatedData[0].lastName);
这样,您就不会创建视图绑定到的对象的新实例

如果正在从内存中删除对象,则绑定不再有效

您可以为您的特定div再次清理node和applyBindings,我并没有真正使用它。这将允许您将viewModel重新绑定到新数据。如果绑定发生变化,这将变得非常不灵活

如果有大量值需要更新,我的最佳建议是使用javascript的关联数组属性,如下所示:

for (var prop in updatedData[0]) {
    viewModel.myviewmodel[prop](updatedData[0][prop]);
}

我们是否可以将MappingPlugin作为一个单一快照使用,而不是绑定单个属性。在我的例子中,我的视图模型中有将近500个属性,所以我选择了映射插件。
viewModel.myviewmodel.firstName(updatedData[0].firstName);

viewModel.myviewmodel.firstName(updatedData[0].lastName);
for (var prop in updatedData[0]) {
    viewModel.myviewmodel[prop](updatedData[0][prop]);
}