在Rx JS中触发自定义事件

时间:2010-06-26 23:43:39

标签: javascript jquery reactive-extensions-js

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

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

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

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

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

2 个答案:

答案 0 :(得分:7)

即便如此,你的问题有点陈旧,已经回答我想与你分享我的意见。

您提到要将自定义事件作为Observables。对于自定义事件,当你真正想拥有的不是一个事件而是一个Observable时,根本不需要使用jQuery。我喜欢将Observable视为类固醇事件。因此,在您希望公开Observable的组件中,为什么不直接使用RxJS而不是间接使用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部分时,可以减少与不同框架的绑定。

答案 1 :(得分:0)

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

此链接可以帮助您:jQuery + RxJS