我试图找出如何使用ko映射插件向可观察数组添加其他属性。所以,例如,如果我有这样的数据
var items = [{
foo1: 'bar1',
foo2: 'bar2',
foo3: 'bar3'
}, {
foo1: 'bar4',
foo2: 'bar5',
foo3: 'bar6'
}];
我可以像这样绑定我的淘汰观察
function viewModel() {
var self = this;
this.items = ko.observableArray('');
}
var vm = new viewModel();
(function($) {
ko.applyBindings(vm); //bind the knockout model
ko.mapping.fromJS(items, {}, vm.items); // map the data to the
})(jQuery);
但是如果在items数组中我希望每个项目都有一个额外的属性。例如editMode:false。我需要做些什么才能实现这一目标。我认为它与创建回调有关,但我无法弄明白。
这是我的小提琴https://jsfiddle.net/0o89pmju/5/。我无法弄清楚如何在映射上使用create函数,为项目数组中的每个项目添加值为false的editMode的附加属性。
答案 0 :(得分:1)
也许有更好的解决方案。
您可以通过这种方式调用映射:
ko.mapping.fromJS(items, mapping,vm.items);
mapping
是一个具有create
函数的对象:
var mapping = {
create: function(options) {
return new dummyModel(options.data);
}
}
dummyModel
是一个临时对象,而不是包含您要添加的新属性以及来自插件的属性:
var dummyModel = function(data) {
ko.mapping.fromJS(data, {}, this);
// New Properties
this.editMode = ko.observable(false)
}
以下是fiddle。
希望这有帮助。
PD:此链接中的信息来源Pluggin Mapping(使用“创建”自定义对象构建)