Knockout.js 在有子对象上使用敲除映射插件
假设我有以下数据:Knockout.js 在有子对象上使用敲除映射插件,knockout.js,knockout-mapping-plugin,Knockout.js,Knockout Mapping Plugin,假设我有以下数据: 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.to
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根对象中,年龄不存在,但在子对象中,年龄存在。
这是因为映射插件跟踪原始属性,但只跟踪根对象
除了对根目录下的每个子集合使用自定义“创建”映射外,是否还有其他方法可以对子集合对象启用此跟踪?可能您唯一可行的选择是对每个子集合使用自定义的
创建
函数
但您不需要手动创建映射,您可以使用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);
演示。那么您希望在
未显示的数据上显示该值。children[0]。年龄不应该是12岁?或者您希望unmappedData.age
应该是44?在unmappedData对象中,我希望age不显示。对于根对象和子对象。那么您唯一可行的选择可能是为每个子集合使用自定义的create
映射。。。但是您可以使用ko.mapping.visitModel
方法生成映射配置:这正是我的意思。谢谢如果你把答案写进答案里,我会给你分数。