Javascript KnockoutJs将JSON obj绑定到嵌套的ViewModel,不要忽略ViewModel与JSON obj不对应的属性,并保留VM函数
我在KnockoutJs中定义了一个嵌套的viewmodel,如下所示:Javascript KnockoutJs将JSON obj绑定到嵌套的ViewModel,不要忽略ViewModel与JSON obj不对应的属性,并保留VM函数,javascript,json,knockout.js,Javascript,Json,Knockout.js,我在KnockoutJs中定义了一个嵌套的viewmodel,如下所示: function Person() { var self = this; self.title = ko.observable(""); self.someProp = ko.observable(false); self.someFunc = function() { self.someProp(false); }; } function viewMode
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获取所需数据,然后从JSON对象中填充title
Person的property,但从服务器返回的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>
通过使用此代码,顶部错误未显示,应用程序工作正常。通过调用vm.loadPersonsData()
在另一个函数或事件中,成功地从服务器获取数据并绑定到html。但点击按钮顶部会显示错误消息
请告诉我如何修复这个错误?
问候您的回电
success: function (response) {
self.someData(response.someData);
}
不是膨胀Person对象,而是附加数据,不是Person的实例在AJAX调用中,完全替换了self.someData的内容。看起来您想替换一些数据,但保留someFunc
。你可以看看ko.mapping。好的,你已经正确地指出了问题所在,现在如果你能提到解决方案,那就太好了。与其在self.someData中添加response.someData,不如在self.someData中添加一个人self.someData(Person())
。这将是一个没有数据的空的人,你也必须把它设定好。我知道回复,我只是在暗示:如果你用一个函数来编辑你的答案,这个函数实际上将显示它需要作为OP预期工作的代码,我会考虑投票你的答案而不是增加我的答案。现在你的答案是:“问题在这里,找出剩下的”。很明显,OP需要更好地理解JS中的OOP。
success: function (response) {
self.someData(response.someData);
}