2013-11-07 4 views
0

Я пишу легкое веб-приложение с помощью Knockout.js, но у меня много проблем с выполнением чего-то, что должно быть легко но я не могу понять, где я ошибаюсь. У меня есть ko.observableArray, и я заполняю его данными JSON с сервера REST php. Когда я добавляю или удаляю элементы из этого массива, пользовательский интерфейс обновляется в порядке. Я хочу, чтобы пользовательский интерфейс был обновлен, когда я редактирую элемент массива. Я читал, что элемент массива не наблюдается, поэтому я попытался сделать их наблюдаемыми, но все же он не работает. Вот код. (I omissed части я не считаю важным)Knockout.js: ObservableArrays element Observable Uncaught TypeError: Object [object global] не имеет метода 'disposeCallback'

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); 

Этот код работает, если я не делаю для внутренней $ .getJSON, но с ним, я получаю следующее сообщение об ошибке: Object [объект глобальной] имеет нет метода 'disposeCallback' от knockout.js в момент, когда я запускаю функцию confirmEdit. Запрос PUT также не выполнен, и я понятия не имею, почему. Любая помощь действительно оценена, спасибо!

ответ

3

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^