问题描述
我正在处理一个项目,在该项目中我有一个跨应用程序运行的单例。这个单例提供了一个视图模型可以订阅的 observable。订阅后,订阅者应该从 observable 中获取最新数据,然后继续侦听更多数据。
基本上,我正在寻找 Knockout 中的 RxJS BehaviorSubject 实现。
我是 KO 的新手。我有一个可以工作的扩展器,但我不确定我所做的是否会导致问题。
这是我的扩展器:
require(['knockout'],function(ko) {
ko.extenders.subscribeWithLatest = function (target) {
var _subscribe = target.subscribe;
target.subscribe = function (callback) {
var subscription = _subscribe.apply(this,arguments);
var currValue = target.peek();
if (currValue) {
// I'm using setTimeout to stop the value from being
// provided before the subscription is returned.
// I'm not proud of this.
setTimeout(() => {
try { callback(currValue); } catch(e) {} }
);
}
return subscription;
};
return target;
};
});
上面的代码确实按我的意愿工作,但我不确定它的效率。
解决方法
它实际执行的操作(订阅、峰值、等待、获取价值)有点混乱。你试过像这样更简单吗?
myViewModel.personName.subscribe(function(newValue) {
alert("The person's new name is " + newValue);
});
Knockout 并没有完全包含 RxJS 行为主题,坦率地说,它并不总是需要的。