【问题标题】:Which events can be subscribed to with Knockout's observable.subscribe function可以使用 Knockout 的 observable.subscribe 函数订阅哪些事件
【发布时间】:2014-05-06 13:39:36
【问题描述】:

在 Knockout 文档的 Explicitly Subscribing to Observables 部分下,引用了 subscribe 函数的 event 参数,但该页面上仅给出了两个示例 changebeforeChange

例如,我尝试将"focus" 作为第三个参数传入,但没有成功。我并不感到惊讶,因为"focus" 是一个 DOM 元素的事件,而不是一个淘汰的 observable,但理论上它可以为绑定到该 observable 的所有元素设置对焦点事件的订阅。

是否有可以使用 Knockout 的 observable.subscribe 函数手动订阅的所有事件的列表?

【问题讨论】:

  • 仅有的两个内置选项是changebeforeChange。这些是 ko.observables 的唯一“事件”。你可能需要 event 绑定是你想设置一个“焦点”事件......
  • @nemesv 感谢您的解释。为什么不将此添加为答案而不是评论?当您说“只有两个内置选项”时,这是否意味着可以在可以通过这种方式订阅的 observables 上添加额外的自定义事件?如果是这样,是否有一个例子可以说明如何做到这一点?
  • 还有arrayChange,如Tracking array changes中所述

标签: events knockout.js subscriptions


【解决方案1】:

在您的情况下使用 "event" binding 是有意义的。

因为只有两种方法可以通知订阅者可观察变量:beforeChangechange

在 knockoutJs 代码中,有一个简单的 if 块链,用于检查是否指定了事件,以及是否事件等于 beforeChange。这基本上就是所有的逻辑,所以没有触发其他事件。


实现此逻辑的零件表单knockoutJS:

  self["notifySubscribers"] = function(value, event) {
    if (!event || event === defaultEvent) {
      self._rateLimitedChange(value);
    } else if (event === beforeChange) {
      self._rateLimitedBeforeChange(value);
    } else {
      self._origNotifySubscribers(value, event);
    }
  };

【讨论】:

猜你喜欢
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-29
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多