簡體   English   中英

KnockoutJs將JSON obj綁定到嵌套的ViewModel,並且不要忽略與JSON obj不對應的ViewModel屬性,並保留VM函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM