2010-06-26 30 views
3

我试图了解Reactive JS。在JQuery中,我可以触发自定义事件为在Rx JS中触发自定义事件

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

并传递数据(即“测试”)。目前还不清楚如何在RxJS中做到这一点。我可以尝试将jquery事件转换为

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

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

回答

0

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

此链接将帮助您:jQuery + RxJS

7

即使这样你的问题是有点老了,并且已经回答了,我想与大家分享我的看法。

您提到您希望将自定义事件设置为Observables。对于自定义事件,当你真正想要的不是一个事件,而是一个Observable时,根本不需要使用jQuery。我喜欢将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你会发现,任何事件实际上可能是可观察的。事实上,在F#中,IEvent派生自IObservable。

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