【发布时间】:2013-05-08 09:03:05
【问题描述】:
我正在使用映射插件从事件溯源事件中更新数组
this.itemMapping = {
key: function (item) {
return ko.utils.unwrapObservable(item.id);
},
create: function () {
return new ItemViewModel();
},
update: function (options) {
return options.target.update(options.data);
}
};
问题是事件一次出现,但我希望数组能够反映所有事件。剔除映射的默认行为是删除数据中未找到的项目,我可以禁用它吗?
显示问题的小提琴
【问题讨论】:
-
简短回答:不。您不能禁用它,您已经编写了自己的合并逻辑。已删除的项目不会转移到
newContents数组see in source。但你知道这是开源的,所以你只需要 fork 和修复它。 -
我查了源,在删除的情况下为时已晚,原来的项目被删除了,所以找不到它的索引等重新插入它。想找个更好的地方拦截,但是代码实在是太难看懂了(updateViewmodel这个方法几百行太长了)
-
你可以让它以肮脏的方式工作......jsfiddle.net/MCs6f
-
不行,逻辑严重依赖比较新传入的数组(漏掉了item)
标签: knockout.js knockout-mapping-plugin