Knockout.js : ObservableArrays element Observable Uncatch TypeError: Object [object global] 没有方法'di



我正在使用Knockout编写一个简单的Web应用程序.js但是我在完成一些应该很容易的事情时遇到了很多麻烦,但我无法弄清楚我错在哪里。我有一个ko.observableArray,我用来自php REST服务器的JSON数据填充它。当我在此数组中添加或删除项目时,UI 更新正常。我也希望在编辑数组元素时更新 UI。我读到数组的元素是不可观察的,所以我试图使它们可观察,但它仍然不起作用。这是代码。(我遗漏了我认为不重要的部分)

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 内部执行 for ,则此代码有效,但有了它,我会收到以下错误:对象 [对象全局] 没有从挖空中"disposeCallback"方法.js在我触发确认编辑功能的那一刻。PUT请求也没有执行,我不知道为什么。非常感谢任何帮助,谢谢!

因为 nome 是一个可观察量,所以你必须在函数中解开它:

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

否则,jQuery 将可观察量视为对象映射,包括调用对象上的所有函数。

最新更新