配列がオブジェクト内にネストされている場合、Knockout.jsマッピングプラグインの「create」および「update」コールバックは、予期したときに呼び出されません。view_model.mappedCreate({})
特に、を呼び出すとコールバックがトリガーされることが予想されます。
次のようなデータ構造とマッピングが与えられた場合の例を次に示します。
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);
}
}
}
});
このjsFiddleからわかるように、上記の出力は次のとおりです。
{
"Test": {
"Items": [
{
"Name": "Red",
"Count": 0
},
{
"Name": "Green"
}
]
},
"NewItem": ""
}
さらに、console.log
ステートメントが呼び出されることはありません。
の2番目の要素Items
が{"Name": "Green", "Count": 1 }
(およびconsole.logステートメントが実行される)であることが期待されます。
がネストされていない場合、このjsFiddleItems
でわかるように、期待どおりに機能します。
明らかなことを見落としている可能性がありますが、いずれにせよ、この問題を回避する方法についての洞察と提案に感謝します。