我正在尝试映射 JSON 对象的所有可能嵌套对象,以便每个对象都成为可观察对象。我的印象是,使用ko.mapping.fromJS
会导致所有对象及其对象变得可观察。但是,我没有看到这种情况发生。
如果您查看 JSFiddle 和下面的代码,您将看到 span 最初显示值“Test”。我的意图是单击按钮以更新 viewModel 的内容stuff2
,这应该将跨度的值更改为“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 对象如此庞大和复杂(这显然不是)怎么办?是否可以使用一些递归功能来遍历每个对象的嵌套对象以使它们都可观察?