【发布时间】:2012-05-20 06:31:34
【问题描述】:
我使用 Knockout.js 作为 MVVM 库来将我的数据绑定到某些页面。我目前正在构建一个库来对 Web 服务进行 REST 调用。 我的 RESTful Web 服务返回一个简单的结构:
{
id : 1,
details: {
name: "Johnny",
surname: "Boy"
}
}
我有一个可观察的主要父母,myObject。
当我这样做时
myObject(ko.mapping.fromJS(data))
myObject 中的 observables 是:
idnamesurname
我怎样才能使details(理论上结构中的任何对象都是可观察的)?我需要这种行为,以便我可以在细节上设置一个计算出的 observable,并在任何内部数据发生变化时立即引起注意。
我已经设置了一个基本的递归函数,它应该可以解决问题。当然,myObject.details 不会变成 observable。
// Makes every object in the tree an observable.
var makeAllObservables = function () {
makeChildrenObservables(myObject);
};
var makeChildrenObservables = function (object) {
// Make the parent an observable if it's not already
if (!ko.isObservable(object)) {
if ($.isArray(object))
object = ko.observableArray(object);
else
object = ko.observable(object);
}
// Loop through its children
for (var child in object()) {
makeChildrenObservables(object()[child]);
}
};
我很确定这与不正确的引用有关,但我该如何解决这个问题?谢谢。
【问题讨论】:
-
不是一个直接的答案,但是 CanJS 中的 can.Observe 完全按照您的描述构建了一个嵌套的 observable。
标签: javascript mvvm knockout.js knockout-mapping-plugin knockout-2.0