Knockout Force在设置新值时通知订阅者可观察到的值
Knockout Force notify subscribers of an observable when setting new value
假设我们想给一个可观察对象分配一个新值,并通知订阅者,无论新值是否等于旧值。
默认情况下,如果新值与旧值相同,Knockout不会通知订阅者,因此我们需要采取一些额外的步骤来实现我们的目标。
我知道有扩展器currentPage.extend({ notify: 'always' })
,但我只需要在特定的地方进行这种行为,而不是在全局范围内进行观察。
目前,我正在使用以下方法:
// Some view model property of primitive type
self.currentPage = ko.observable(1);
// Some view model method
self.foo = function (newPage) {
var currentPageObservable = self.currentPage;
// Save the old value
var oldCurrentPageValue = currentPageObservable();
// Update the observable with a new value
currentPageObservable(newPage);
if(oldCurrentPageValue === newPage) {
// If old and new values are the same - notify subscribers manually
currentPageObservable.valueHasMutated();
}
};
但这看起来可能会更好。
例如,为什么Knockout没有提供一种为始终通知订阅者的可观察对象分配新值的方法还是我错过了这样一个
你有什么方法来完成同样的任务
您的方法已经足够好了,只是您可能需要对其进行重构,以便在值发生更改时不会两次通知订阅者。
if (oldCurrentPageValue !== newPage) {
// Update the observable with a new value
currentPageObservable(newPage);
}
else {
// If old and new values are the same - notify subscribers manually
currentPageObservable.valueHasMutated();
}
在您的情况下,currentPageObservable(newPage)
会通知订阅者,然后valueHasMutated
会第二次通知订阅者。
另一种方法是用特定的方法扩展ko.observable
ko.myObservable = function Observable(initialValue) {
var result = ko.observable(initialValue);
result.updateWithNotification = function (newValue) {
...
}
return result;
}
var o = ko.myObservable();
o.updateWithNotification(newValue);
相关文章:
- knockoutjs可观察数组
- 多次发射多个可观察器的问题
- 未激发路由的控制器属性上的观察者
- 无法在关闭弹出窗口时传递可观察的数据
- firefox插件:退出不工作的应用程序观察器
- 如何收集Knockout可观察性以放入JSON
- 在rxjs中巧妙的蒸汽可观察合并
- Knockout observable没有观察到其中一个属性
- 将属性设置为未定义时未通知观察者
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- KOValidation在错误消息中获取可观察值、$index()、$data等
- 启用具有多个布尔可观察标志的绑定
- 为什么prototypjs观察到回调函数有绑定
- Ember:当子控制器同时观察到父控制器触发请求的相同属性时
- 检测 DIV 的高度何时变化,而无需轮询或突变观察者
- 财产'catch'在类型'可观察<任意>'
- 在另一个可观察量完成后触发第二个表单提交单击
- 如何使用javascript设置元素旋转和动态观察的动画
- 如何正确处理依赖ViewChild和Angular 2中可观察到的数据的组件上的更改检测
- Knockout Force在设置新值时通知订阅者可观察到的值