我正在尝试映射JSON对象的所有可能的嵌套对象,以便每个对象都成为一个可观察的对象。我的印象是使用ko.mapping.fromJS
会导致所有对象及其对象变得可观察。但是,我没有看到这种情况发生。
如果您查看下面的JSFiddle和代码,您会看到跨度最初显示的值为“Test”。我的目的是单击按钮以使用stuff2
的内容更新viewModel,这应该将span的值更改为“Test2”。但是,按钮单击不会更新任何内容。
http://jsfiddle.net/Eves/L5sgW/38/
HTML:
<p> <span>Name:</span>
<span data-bind="text: IntroData.Name"></span>
<button id="update" data-bind="click: Update">Update!</button>
</p>
JS:
var ViewModel = function (data) {
var me = this;
ko.mapping.fromJS(data, {}, me);
me.Update = function () {
ko.mapping.fromJS(stuff2, {}, windows.viewModel);
};
return me;
};
var stuff = {
IntroData: {
Name: 'Test'
}
};
var stuff2 = {
IntroData: {
Name: 'Test2'
}
};
window.viewModel = ko.mapping.fromJS(new ViewModel(stuff));
ko.applyBindings(window.viewModel);
是否只是必须使用映射选项才能使嵌套对象可观察?如果是这样,如果JSON对象如此庞大和复杂(显然这不是),该怎么办?可以使用一些递归功能来遍历每个对象的嵌套对象,使它们都可以观察到吗?
答案 0 :(得分:0)
如下修改更新功能将起作用。
me.Update = function () {
ko.mapping.fromJS(stuff2, {}, windows.viewModel);
};