Knockout.js Сделать каждый вложенный объект наблюдаемым

Я использую Knockout.js в качестве библиотеки MVVM для привязки моих данных к некоторым страницам. В настоящее время я создаю библиотеку для вызовов REST в веб-службу. Мой веб-сервис RESTful возвращает простую структуру:

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

У меня есть наблюдаемый главный родитель, myObject. Когда я делаю

myObject(ko.mapping.fromJS(data))

, наблюдаемые в myObjectследующие:

  • id
  • имя
  • фамилия

Как я могу сделать детали(и теоретически любой объект в структура наблюдаемая)? Мне нужно такое поведение, чтобы я мог установить вычисляемое наблюдаемое для деталей и быть замеченным, как только какие-либо внутренние данные изменятся.

Я создал базовую рекурсивную функцию, которая должна помочь. Конечно, 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]);
    }
};

Я почти уверен, что дело в неверных ссылках, но как решить эту проблему? Спасибо.

34
задан frapontillo 11 May 2012 в 16:21
поделиться