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