【发布时间】:2017-10-02 10:08:09
【问题描述】:
我正在试验 ko.mapping.fromJS (http://knockoutjs.com/documentation/plugins-mapping.html)
鉴于下面的代码和期望,有人可以向我解释为什么实际输出不同吗?
var obj = { name: "frederick", minions: [{id:1, name:'Alice'},{id:2, name:'Bob'}] }
var model = {
'minions': {
key: function(data) { return ko.utils.unwrapObservable(data.id); }
}
}
var vm = ko.mapping.fromJS(obj, model);
vm.name.subscribe(x=>console.log("Changed name"));
vm.minions.subscribe(x => console.log("changed minions"));
vm.minions()[0].id.subscribe(x => console.log("changed id [0]"));
vm.minions()[0].name.subscribe(x => console.log("changed name [0]"));
vm.minions()[1].id.subscribe(x => console.log("changed id [1]"));
vm.minions()[1].name.subscribe(x => console.log("changed name [1]"));
obj.minions[0].name = 'Charlie';
ko.mapping.fromJS(obj, vm);
预期的日志记录:
changed name [0]
实际记录:
changed name [0]
changed minions
问题: 由于没有向数组添加或删除记录,为什么我会看到“Changed minions”?这些事件是否总是冒泡,或者仅在数组和直接子对象(/行)的情况下? (或者我在模型中犯了错误?我可以“修复”这个吗?)
【问题讨论】:
-
PS:引用来自 GitHub 上的 knockout.mapping 插件:由于时间不够,该项目目前没有积极维护。(最后一次提交日期为 2014 年 1 月 10 日, 2014 年 1 月 23 日以上评论中提到的票...)
标签: javascript knockout.js knockout-mapping-plugin knockout-3.0