Загрузка данных сpendentObservable вызывает бесконечный цикл - PullRequest
1 голос
/ 27 августа 2011

Я играю с Knockout и сейчас пытаюсь использовать плагин для адреса Knockout (на основе адреса jQuery).

Этот код ниже работает, за исключением того, что при попытке ввода адреса linkObservableToUrl обеспечивает загрузку страницы без прав tags. Я предполагаю, что что-то не так в том, как я загружаю сообщения, но я не уверен, как это можно сделать с помощью платформы Knockout.

У меня есть следующий код, который вызывает бесконечный цикл:

var viewModel = {
    page: ko.observable(1),
    //messages: ko.observableArray([]),
    tags: ko.observable()
};

viewModel.filterTags = function (filterTags) {
    viewModel.tags(filterTags);
};

viewModel.messages = ko.dependentObservable(function () {
    $.ajax(
        // abbreviated
        data: ko.toJSON(viewModel),
        // abbreviated
)}, viewModel);

ko.applyBindings(viewModel);

ko.linkObservableToUrl(viewModel.tags, "tags", null);

Как я могу решить эту проблему, и при этом сообщения зависят от страницы и тегов?

Ответы [ 2 ]

3 голосов
/ 29 августа 2011

Переключиться на AngularJS.Привязка данных в Angular намного лучше, чем в Knockout.Большая часть проблем, с которыми вы сталкиваетесь здесь при использовании бесконечных циклов и т. Д., Связана с необходимостью Knockout для наблюдаемых оболочек.

Angular не требует видимых оболочек ваших объектов.Angular может наблюдать любой стандартный объект JSON / Javascript и привязывать данные непосредственно к любому элементу HTML через MVVM.

В Angular вы просто сделаете свой вызов AJAX для ViewModel.messages, и стандартный JSON будет применен к вашемуСвойство ViewModel.messages.Нет заметных оболочек.Это устраняет необходимость в ko.dependentObservable () и, следовательно, удаляет ваш бесконечный цикл.

http://www.angularjs.org

1 голос
/ 29 августа 2011

Во втором примере (который является длинным для фрагмента кода) у вас есть:

viewModel.messages = ko.dependentObservable(function () {
...
        data: ko.toJSON(viewModel),
...

Если вызов ko.toJSON пытается получить значение всех наблюдаемых свойств в модели представления, он попытается оценить свойство viewModel.messages. Это снова вызовет ko.toJSON, что приведет к бесконечному циклу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...