可以通过调用其valueHasMutated
方法来强制向订阅者发送通知。 valueWillMutate
做了什么?
答案 0 :(得分:7)
订阅observable时,有时您想知道observable的更改时的先前值。例如,当您有一个可观察的selectedItem
(在项目列表中)时,但每个单独的项目也具有selected
属性。当selectedItem
更改时,您希望在之前选择的项目上选择selected = false
。你可以这样做:
selectedItem.subscribe(function (previous) {
previous.selected = false;
}, null, 'beforeChange');
valueWillMutate用于触发beforeChange
事件。
编辑:要获得更多实用功能,请查看Knockout-2.2.0, subscribe get value before change AND new value。投票最高的答案会创建一个扩展程序,允许您订阅一个可观察对象并同时使用旧值和新值。
编辑2:只是为了澄清:你不需要明确地调用valueWillMutate
来获取beforeChange
事件:当你操作一个observable时,Knockout会为你做这件事。您只需要在操作基础值时手动执行此操作,或者由于某种原因需要明确触发订阅者。我的回答是从Knockout的内部实现的角度写的,我没有说清楚。