如何更新映射模型的一部分?
var model = { foo: { bar: "hello" }, moo: { la: "world" }};
var mapped = ko.mapping.fromJS(model);
映射结果:
mapped =
{
__ko_mapping_object__ : object,
foo: {
bar : function c()
},
moo: {
la: function c()
},
__proto__ : object
}
由于foo
和moo
无法观察,如果我这样做:
mapped.foo = { "bar" : "changed" };
或
mapped.foo = ko.mapping.fromJS({ "bar" : "changed" });
对象已更新,但未触发重新绑定。
有什么想法吗?我需要在更新模型的一部分时发生绑定。
我的一个想法是抓取部分模型然后强制重新绑定。
triggerObjectRebind(mapped.foo);
function triggerObjectRebind(model) {
for (var property in model) {
if (model.hasOwnProperty(property)) {
if (typeof model[property] === "object") {
triggerObjectRebind(model[property]);
} else if (typeof model[property] === "function") {
model[property].valueHasMutated();
}
}
}
}
答案 0 :(得分:2)
进行更新时,需要将映射对象作为参数传入。相应的属性将被更新。
var model = {
foo: { bar: "hello" },
moo: { la: "world" }
};
var mapped = ko.mapping.fromJS(model);
var newFoo = { bar: "changed" };
// do the update on the foo object
ko.mapping.fromJS(newFoo, {}, mapped.foo);