我想使用淘汰映射插件,但我需要我模型上的对象本身就是属性(主要是因为它们需要可替换)。
使用以下模型考虑一个极为简化的示例:
{
family: {
patriarch: {
name: "Fred Flintstone", child: "Pebbles"
}
},
allPeople: [
{name: "Fred Flintstone", child: "Pebbles"},
{name: "Wilma Flintstone", child: "Pebbles"},
{name: "Barney Rubble", child: "Bam Bam"}
]
}
假设我希望能够通过选项来修改族长,其中选项是allPeople,其中更改选择可能会产生许多副作用。
映射插件使所有名称属性都可观察,allPeople成为observableArray,但为了使我的选择正常工作,必须能够观察到族长对象本身。
编写我自己的原始映射器是13行代码,但由于映射插件功能如此全面,我希望有一个选项或其他方法可以使这个看似常见的场景工作。
答案 0 :(得分:1)
这个怎么样?对于选择:
<select data-bind="options: allPeople, optionsText: 'name', value: family.patriarch"></select>
在设置映射时,不是为patriarch属性指定子视图模型,而是使用初始数据返回一个observable:
var data = {
family: {
patriarch: {
name: "Fred Flintstone", child: "Pebbles"
}
},
allPeople: [
{name: "Fred Flintstone", child: "Pebbles"},
{name: "Wilma Flintstone", child: "Pebbles"},
{name: "Barney Rubble", child: "Bam Bam"}
]
};
var mapping = {
'patriarch': {
create: function (options) {
return ko.observable(options.data);
}
}
}
var vm = ko.mapping.fromJS(data, mapping);
vm.family.patriarch.subscribe(function(value) {
alert(ko.toJSON(value));
});
ko.applyBindings(vm);
小提琴:
这是否可以根据您的需要进行操作?