如果数组嵌套在对象中,则不会调用 Knockout.js 映射插件的“创建”和“更新”回调。特别是,人们会期望调用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
语句永远不会被调用。
人们会期望的第二个元素Items
是{"Name": "Green", "Count": 1 }
(并且执行 console.log 语句)。
当Items
没有嵌套时,它按预期工作 - 正如您在这个 jsFiddle中看到的那样。
我可能忽略了一些明显的事情,但无论如何我都会感谢有关如何解决这个问题的见解和建议。