[英]KnockoutJs bind JSON obj to nested ViewModel and dont ignore ViewModel not corresponding properties to JSON obj and keep VM functions
我在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獲取,然后Person
title
屬性從JSON對象填充,但是從服務器返回的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。 但是,通過單擊按鈕頂部顯示了錯誤消息。
請告訴我如何解決此錯誤? 問候
您的回叫
success: function (response) {
self.someData(response.someData);
}
不是膨脹Person對象,而是附加數據,而不是Person的實例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.