我正在使用Knockout.js编写一个简单的Web应用程序,但是我很难完成一些应该很容易但我无法弄清楚我错在哪里的东西。 我有一个ko.observableArray,我用来自php REST服务器的JSON数据填充它。 当我从这个数组中添加或删除项目时,UI更新正常。 我想在编辑数组元素时更新UI。 我读到数组的元素是不可观察的,所以我试图使它们成为Observable,但它仍然不起作用。 这是代码。 (我省略了我认为不重要的部分)
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 [object global]没有来自knockout.js的方法'disposeCallback' 在我触发confirmEdit功能的那一刻。 PUT请求它也没有执行,我不知道为什么。 非常感谢任何帮助,谢谢!
答案 0 :(得分:3)
因为nome
是一个可观察的,你必须在你的函数中打开它:
self.confirmEdit = function(){
$.ajax({
url: 'sections/' + self.sectionToEdit().id,
type: 'PUT',
data: self.sectionToEdit().nome(),
});
}
否则,jQuery将observable视为对象映射,包括调用对象上的所有函数。