1
如果數組嵌套在對象中,則Knockout.js映射插件的'create'和'update'回調函數不會被調用當人們所期望的時候。特別是,預計撥打view_model.mappedCreate({})
會觸發回調。Knockout.js映射插件不會調用對象中數組的「創建」或「更新」屬性
下面是一個例子,給定的數據結構和映射是這樣的:
var data = {
Test: {
Items: [
{ Name: "Red", Count: 0},
{ Name: "Green"}
]
},
NewItem: ""
},
counter = 0;
var vm = ko.mapping.fromJS(data, {
Test: {
Items: {
create: function(options) {
options.data.Count = ++counter;
console.log("Data:", options.data);
return ko.mapping.fromJS(options.data);
},
update: function(options) {
options.data.Count = ++counter;
console.log("Data:", options.data);
return ko.mapping.fromJS(options.data);
}
}
}
});
正如從this jsFiddle看到,上述的輸出是:
{
"Test": {
"Items": [
{
"Name": "Red",
"Count": 0
},
{
"Name": "Green"
}
]
},
"NewItem": ""
}
此外,console.log
聲明永遠不會被調用。
可以預期Items
的第二個元素爲{"Name": "Green", "Count": 1 }
(和要執行的console.log語句)。
當Items
沒有嵌套時,它按預期工作 - 如您在this jsFiddle中看到的那樣。
有可能我忽略了一些明顯的東西,但無論如何我都會對如何解決此問題的見解和建議表示感謝。