我似乎无法在KOs网站或Google搜索上找到任何文档来描述如何在维护绑定的同时更改视图模型中的整个对象。
$(function () {
var stuff = {
IntroData: {
SomeObject: {
Name: 'Hello'
}
}
};
var someObject = {
Name: 'World'
}
window.viewModel = ko.mapping.fromJS(stuff);
ko.applyBindings(window.viewModel);
$("#btnUpdateSomeObject").click(function() {
try
{
window.viewModel.IntroData.SomeObject = ko.mapping.fromJS(someObject);
} catch(ex) {
alert("Failure: " + ex.toString());
}
});
});
我有一个非工作小提琴,描述了这种情况:http://jsfiddle.net/W5X2b/
这可能吗?我觉得这对KO来说是一个巨大的缺点,或者我在某种程度上不恰当地使用它。
答案 0 :(得分:6)
使用ko.mapping.fromJS
时的问题。
因此,您应使用ko.mapping.fromJS(someObject)
而不是ko.mapping.fromJS(someObject, {}, window.viewModel.IntroData.SomeObject);
。
someObject
您的最新数据。{}
映射选项。window.viewModel.IntroData.SomeObject
您想要更新的目标对象。的 Working Demo 强> 的
的更新强>
来自KnockoutJS Mapping Documentation
ko.mapping.fromJS的第三个参数表示目标
答案 1 :(得分:0)
是的,这是可能的,但SomeObject需要是一个可观察的。
var stuff = {
IntroData: {
SomeObject: ko.observable({
Name: 'Hello'
})
}
};
当SomeObject是一个可观察的,当你'设置'它时; ko将更新视图。
window.viewModel.IntroData.SomeObject(ko.mapping.fromJS(someObject));