knockout.js - 行为主体淘汰赛可观察到的表现
问题描述
我正在做一个项目,我有一个在应用程序中运行的单例。这个单例提供了一个视图模型可以订阅的可观察对象。订阅后,订阅者应该从 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 行为主题,坦率地说,它并不总是需要。
推荐阅读
- python - Python列表定义-根据条件插入或不插入元素
- go - 无法解释为什么“55”转换为“7”
- r - 我可以更改 RStudio 保存片段的位置吗?
- python - numpy "对象没有属性 "打开""
- java - Elasticsearch 6.4:XContentBuilder 在传递给 request.mapping() 时无法关闭
- reactjs - React/Typescript Route 组件字段类型错误
- javascript - 0 高度导航栏仍然可见?
- java - 如何将对象集合转换为arraylist
- python - 使用 Python RegEx 分离 SSL 证书
- android - 如何在我的 Android 项目中添加带有 API-Data 的饼图