我在KnockoutJs中定义了一个嵌套的viewmodel,像这样:
function Person() {
var self = this;
self.title = ko.observable("");
self.someProp = ko.observable(false);
self.someFunc = function() {
self.someProp(false);
};
}
function viewModel() {
var self = this;
self.someData = ko.observableArray([new Person()]);
self.loadPersonsData = function() {
$.ajax({
type: "POST",
url: '/GetAllPersons',
dataType: "json",
async: false,
contentType: "application/json;charset=utf-8",
data: JSON.stringify({"catId": selectedCategoryId }),
success: function (response) {
self.someData(response.someData);
}
});
}
从ajax获取所需数据,然后从{J}对象填充title
Person
属性,但从服务器返回的JSON对象中不存在someProp
属性。
然后应用绑定:
var vm;
$(function() {
vm = new viewModel();
vm.loadPersonsData();
ko.applyBindings(vm);
});
以这种方式将视图绑定到html元素:
<section data-bind="foreach: someData">
.
.
.
<button data-bind="click: function(data, event) { $data.someFunc(); event.stopPropagation(); }" type="button">other</button>
</section>
单击按钮时,显示以下错误消息:
TypeError:$ data.someFunc不是函数
然后我在申请绑定之前更改代码:
vm = new viewModel();
vm.loadPersonsData();
$.each(vm.someData() , function(i, val) {
self.someProp = ko.observable(false);
self.someFunc = function() {
self.someProp(false);
};
});
ko.applyBindings(vm);
通过使用此代码顶部错误未显示和应用程序工作正常。通过在另一个函数或事件中调用vm.loadPersonsData();
,数据成功从服务器获取并绑定到html。但是,通过单击按钮顶部显示错误消息。
请告诉我如何修复此错误? 问候
答案 0 :(得分:0)
你的回调
success: function (response) {
self.someData(response.someData);
}
不会对Person对象进行膨胀,它会附加数据,而不是Person的实例