簡體   English   中英

淘汰賽映射無法更新observableArray

[英]Knockout mapping couldn't update observableArray

我正在嘗試通過映射插件來更新可觀察數組,但插件不會更新可觀察數組。

var list = ko.observableArray([]);
ko.mapping.fromJS([{ id: 1 }], list);
console.log(list()); //It is always empty

映射插件將遍歷輸入對象的屬性,並相應地更新目標視圖模型的屬性。 但是,數組沒有屬性(至少沒有您對映射感興趣的屬性)。

嘗試以下方法:

var viewmodel = {
    list: ko.observableArray([])
};

ko.mapping.fromJS({
    list: [{ id: 1 }]
}, {}, viewmodel);

console.log(viewmodel.list());

注意,mapping.fromJS()的第二個參數應該是映射選項。 由於我們沒有選擇,因此我通過了{} 第三個參數是映射目標。


數組不打算傳遞給映射插件。 您可以直接更新它們,對於真正微不足道的東西使用映射插件是沒有意義的:

var list = ko.observableArray([]);
list([{ id: 1 }]);

如果您打算維護一系列子視口,則可以在其中使用映射選項:

var viewmodel = {
    list: ko.observableArray([])
}

ko.mapping.fromJS({
    list: [{ id: 1 }]
}, {
    list: {
        // make items in the "list" property become ItemModel
        // instances that are recognized by their respective ID
        create: function(options) {
            return new ItemModel(options.data);
        },
        key: function(item) {
            return ko.unrwap(item.id);
        }
    }

}, viewmodel);

console.log(viewmodel.list());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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