Nockout.js: asbustableArrays element наблюдаемый uncaught typeerror: Object [Object Global] не имеет метода «DisposeCallback '

StackOverflow https://stackoverflow.com/questions/19848913

Вопрос

Я пишу легкое веб -приложение, используя nockout.js, но у меня много проблем с выполнением чего -то, что должно быть легко, но я не могу понять, где я ошибаюсь. У меня есть ko.observablearray, и я заполняю его данными JSON с сервера REST PHP. Когда я добавляю или удаляю элементы из этого массива, пользовательский интерфейс обновляет. Я хочу, чтобы пользовательский интерфейс был обновлен, когда я редактирую элемент массива. Я читал, что элемент массива не наблюдается, поэтому я старался сделать их наблюдаемыми, но все же он не работает. Вот код. (Я не спускал деталей, которые я не считаю важными)

function sectionViewModel(){

    var self = this;
    self.sections = ko.observableArray();
            self.sectionToEdit = ko.observable();

        //code to initialize self.sections
    $.getJSON("sections", function(data){
         for(var i = 0; i < data.length ; i++){
             var id = ko.observable(data[i].id);
              var nome = ko.observable(data[i].nome);
             self.sections.push({id:id, nome:nome});
          }
     });



    self.confirmEdit = function(){
        $.ajax({
            url: 'sections/' + self.sectionToEdit().id,
            type: 'PUT',
            data: self.sectionToEdit().nome,
        });
    }

};

var debug = new sectionViewModel();
ko.applyBindings(debug);

Этот код работает, если я не выполняю для Inside $ .getJson, но с ним я получаю следующую ошибку: Object [Object Global] не имеет метода «DisposeCallback» от nockout.js в тот момент, когда я запускаю функцию подтверждения. Запрос на то, что он также не выполнен, и я понятия не имею, почему. Любая помощь действительно ценится, спасибо!

Это было полезно?

Решение

Потому что nome это наблюдаемое, вы должны развернуть его в своей функции:

self.confirmEdit = function(){
    $.ajax({
        url: 'sections/' + self.sectionToEdit().id,
        type: 'PUT',
        data: self.sectionToEdit().nome(),
    });
}

В противном случае, jQuery рассматривает наблюдаемую как карту объектов, включая вызов всех функций на объекте.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top