Knockout.js 使每个嵌套的对象成为可观察的
Knockout.js 使每个嵌套的对象成为可观察的
我正在使用Knockout.js作为MVVM库将我的数据绑定到一些页面上。我目前正在构建一个库,用于向Web服务发出REST调用。
我的RESTful Web服务返回一个简单的结构:
{ id : 1, details: { name: "Johnny", surname: "Boy" } }
我有一个可观察的主对象,myObject
。
当我执行
myObject(ko.mapping.fromJS(data))
myObject
中的可观察对象是:
id
name
surname
我该如何使details
(以及理论上结构中的任何对象)成为一个可观察对象?我需要这种行为,这样我就可以在details上设置一个计算的可观察对象,并在任何内部数据发生更改时得到通知。
我已经设置了一个基本的递归函数,应该可以解决问题。当然,它并没有使myObject.details
成为一个可观察对象。
//使树中的每个对象都成为可观察对象。 var makeAllObservables = function () { makeChildrenObservables(myObject); }; var makeChildrenObservables = function (object) { //如果尚未成为可观察对象,则使父对象成为可观察对象 if (!ko.isObservable(object)) { if ($.isArray(object)) object = ko.observableArray(object); else object = ko.observable(object); } //循环遍历其子对象 for (var child in object()) { makeChildrenObservables(object()[child]); } };
我相当确定这是关于错误引用的问题,但我该如何解决呢?谢谢。