Knockout.js 使每个嵌套的对象成为可观察的

11 浏览
0 Comments

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]);
    }
};

我相当确定这是关于错误引用的问题,但我该如何解决呢?谢谢。

0