说,你有一个如下设置:
var model = function() {
this.base = ko.observable("Initial");
this.dependent = ko.computed(function() {
return this.base() + ", computed";
}, this);
};
var vm = new model();
此时,vm
为Object { base: observable(), dependent: dependentObservable() }
(正如所料)
但是,一旦我跑:
ko.mapping.fromJS({base: "hello", dependent: "hi"}, {}, vm)
vm
变为Object { base: observable(), dependent: "hi", __ko_mapping__: Object }
dependent
不再是一个可观察的,我期待它不受影响。
这个问题的原因是,我使用ko.mapping.toJS()将vm
转换为JavaScript object
(根据需要提供dependent
属性)
然后,过了一段时间,我正在使用ko.mapping.fromJS(),如上所示。此组合将覆盖vm
的ko.computed()属性。
我能提出的解决方案:
在映射过程中明确指定要忽略的dependent
。
ko.mapping.fromJS({base: "hello", dependent: "hi"}, {'ignore': "dependent"]}, vm)
让dependent
可写(仅限同名)
this.dependent = ko.computed({
read: function() {
return this.base() + ", computed";
},
write: function() {},
owner: this
});
混杂。信息