首页 > 解决方案 > 行为主体淘汰赛可观察到的表现

问题描述

我正在做一个项目,我有一个在应用程序中运行的单例。这个单例提供了一个视图模型可以订阅的可观察对象。订阅后,订阅者应该从 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;
  };
});

上面的代码确实可以按我的意愿工作,但我不确定它的效率。

标签: knockout.jsknockout-3.0

解决方案


它实际上在做什么(订阅、峰值、等待、获取价值)有点混乱。你试过像这样更简单吗?

myViewModel.personName.subscribe(function(newValue) {
   alert("The person's new name is " + newValue);
});

Knockout 没有 RxJS 行为主题,坦率地说,它并不总是需要。


推荐阅读