【问题标题】:Trigger custom event in Rx JS在 Rxjs 中触发自定义事件
【发布时间】:2026-01-18 11:25:01
【问题描述】:

我正在努力理解Reactive JS。在 JQuery 中,我可以触发自定义事件

$(document).bind('eventbus', function(e, d) { console.log(d);});
$(document).trigger('eventbus', 'test');

并传递数据(即“测试”)。目前尚不清楚如何在 RxJS 中执行此操作。我可以尝试将 jquery 事件转换为

var observable = $(document).ToObservable('eventbus');

但是 observable 返回事件对象而不是我的数据对象。如何使用 RxJS 触发带有数据的自定义事件?我是否总是需要搭载其他一些事件类型?我的目标是使用 RxJS 创建一个简单的事件总线。

【问题讨论】:

    标签: javascript jquery reactive-extensions-js


    【解决方案1】:

    即使你的问题有点老了,已经回答了,我还是想和你分享一下我的看法。

    您提到您希望将自定义事件作为 Observables。对于自定义事件,当您真正想要的不是事件而是 Observable 时,根本不需要使用 jQuery。我喜欢将 Observable 视为类固醇事件。所以在你想要暴露 Observable 的组件中,为什么不直接使用 RxJS 而不是像这样间接使用:

    function Component(){
        var self = {};
        var subject = new Rx.Subject();
    
        //raise notifications this way
        //subject.OnNext("myData"); //could be anything, a string, an object, whatever
    
        self.getObservableSomething = function(){
            return subject.AsObservable();
        }
        return self;
    }
    

    一旦你开始使用 Rx,你会注意到任何事件实际上都可以是 Observable。事实上,以 F# 为例,IEvent 派生自 IObservable。

    此外,当您删除 jQuery 部分时,您可以减少与不同框架的绑定。

    【讨论】:

      【解决方案2】:

      您应该使用 Rx.Observable.FromJQueryEvent 从 jQuery 对象中获取 observable,而不是普通的 .ToObservable。

      此链接将为您提供帮助:jQuery + RxJS

      【讨论】:

        最近更新 更多