gpt4 book ai didi

javascript - Knockout.js 使每个嵌套对象成为 Observable

转载 作者:IT王子 更新时间:2023-10-29 03:14:48 25 4
gpt4 key购买 nike

我使用 Knockout.js 作为 MVVM 库来将我的数据绑定(bind)到某些页面。我目前正在构建一个库来对 Web 服务进行 REST 调用。我的 RESTful Web 服务返回一个简单的结构:

{
id : 1,
details: {
name: "Johnny",
surname: "Boy"
}
}

我有一个可观察的主要父对象,myObject。当我做的时候

myObject(ko.mapping.fromJS(data))

myObject 中的可观察对象是:

  • id
  • 姓名
  • 姓氏

如何制作details(理论上结构中的任何对象都是可观察的)?我需要这种行为,以便我可以在细节上设置一个计算可观察对象,并在任何内部数据发生变化时立即得到通知。

我已经设置了一个基本的递归函数,它应该可以解决问题。它不会,当然,myObject.details 不会变成可观察的。

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

我很确定这是关于不正确的引用,但我该如何解决这个问题?谢谢。

最佳答案

我会使用 knockout mapping plugin .

var jsonData = {
id : 1,
details: {
name: "Johnny",
surname: "Boy"
}
}

var yourMapping = {
'details': {
create: function(options) {
return Details(options.data);
}
}
}

function Details(data) {
ko.mapping.fromJS(data, {}, this);
}

function YourObjectName() {
ko.mapping.fromJS(jsonData, yourMapping, this);
}

这将创建您的对象层次结构,所有子对象都作为可观察对象。

关于javascript - Knockout.js 使每个嵌套对象成为 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10555115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com