假设我有这些数据:
var data = {
name: 'Graham',
children: [
{ id : 1, name : 'Lisa' }
]
}
现在我映射它,添加一些属性并将其映射回来:
var mappedData = ko.mapping.fromJS(data);
mappedData.age = 44;
mappedData.children[0].age = 12;
var unmappedData = ko.mapping.toJS(mappedData);
在unmappedData根对象中,age不存在,但在子对象中,它是。 这是因为映射插件会跟踪原始属性,但仅限于根对象。
除了为根目录下的每个子集合使用自定义“创建”映射之外,还有办法打开子集合对象的跟踪吗?
答案 0 :(得分:2)
可能您唯一可行的选择是为每个子集合使用自定义create
函数...
但您不需要手动创建可以使用ko.mapping.visitModel
方法生成的映射,例如:
var mapping = {};
ko.mapping.visitModel(data, function(item, parent) {
if (ko.mapping.getType(item) === "array")
{
mapping[parent] = {
create: function(op) { return ko.mapping.fromJS(op.data); }
}
}
});
var mappedData = ko.mapping.fromJS(data, mapping);
演示JSFiddle。