我继承了一些使用knockout映射插件的代码,我正在尝试修复bug,其中之一就是在会话期间重新访问网页时,必须更新viewModels而不是替换。我研究过http://knockoutjs.com/documentation/plugins-mapping.html并想象我理解相关部分,至少如何创建和使用ignore数组,例如:
var mapping = {
'ignore': ["propertyToIgnore", "alsoIgnoreThis"]
}
var viewModel = ko.mapping.fromJS(data, mapping);
在我的例子中,要更新viewModels,我实际上需要使用这个参数列表:
ko.mapping.fromJS(data, mapping, viewModel);
我的问题是代码在最初加载后对viewModel进行了一些后处理,在数组元素上创建了计算的observable - 例如,其中一个名为“showRemove”。虽然我创建了一个包含“showRemove”的ignore数组,如:
ko.mapping.fromJS(data, { "ignore": ["showRemove"] }, viewModel);
... fromJS调用抛出异常,消息'“showRemove”未定义。'
有没有办法让插件忽略添加到viewModel的属性,这些属性不在对象的层次结构的顶层?我认为必须有,但我不能轻易找到如何做的解释。
即使我必须手动编写详细的更新代码,我打算让它工作,但我真的不想这样做。
我认为问题及其背景很清楚,但如果没有,请告诉我,我会提供更多细节,包括可能的(非)工作代码示例。