3

我正在尝试理解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 创建一个简单的事件总线。

4

2 回答 2

7

即使你的问题有点老了,已经回答了,我想和你分享我的意见。

您提到您希望将自定义事件作为 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 部分时,您可以减少与不同框架的绑定。

于 2011-04-25T20:56:58.827 回答
0

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

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

于 2010-10-18T02:27:21.663 回答