Ich verwende Knockout.js als MVVM-Bibliothek, um meine Daten an einige Seiten zu binden. Ich baue derzeit eine Bibliothek, um REST-Aufrufe an einen Webdienst zu machen. Mein RESTful-Webdienst gibt eine einfache Struktur zurück:
{
id : 1,
details: {
name: "Johnny",
surname: "Boy"
}
}
Ich habe ein beobachtbares Haupt-Elternteil, myObject
. Wenn ich das tue
myObject(ko.mapping.fromJS(data))
die Observablen in myObject
sind:
id
name
surname
Wie kann ich die details
(und theoretisch jedes Objekt in der Struktur ein Observable)? Ich brauche dieses Verhalten, so dass ich eine berechnete observable auf Details setzen kann und bemerkt werden, sobald einer der internen Daten ändert.
Ich habe eine einfache rekursive Funktion eingerichtet, die das Problem lösen sollte. Das tut sie natürlich nicht, myObject.details
wird nicht zu einer Beobachtungsgröße.
// 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]);
}
};
Ich bin mir ziemlich sicher, dass es etwas mit falschen Referenzen zu tun hat, aber wie kann ich das Problem lösen? Ich danke Ihnen.