Инициировать пользовательское событие в Rx JS - PullRequest
3 голосов
/ 27 июня 2010

Я пытаюсь понять Реактивный JS .В JQuery я могу запускать пользовательские события как

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

и передавать данные (например, «тест»).Не понятно, как это сделать в RxJS.Я мог бы попытаться преобразовать события jquery как

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

, но наблюдаемый возвращает объект события, но не мой объект данных.Как я могу инициировать пользовательские события с данными, используя RxJS?Всегда ли мне нужно использовать другие типы событий?Моя цель - создать простой EventBus с использованием RxJS.

Ответы [ 2 ]

7 голосов
/ 26 апреля 2011

Несмотря на то, что ваш вопрос немного устарел и на него уже дан ответ, я хотел бы поделиться с вами своим мнением.

Вы упомянули, что хотите, чтобы ваши пользовательские события были в качестве наблюдаемых.Для пользовательских событий вообще не нужно использовать jQuery, когда то, что вы действительно хотите иметь, - это не событие, а Observable.Мне нравится думать о 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 вы уменьшаете привязку к разным фреймворкам.

0 голосов
/ 18 октября 2010

вы должны использовать Rx.Observable.FromJQueryEvent, чтобы получить наблюдаемое из объекта jQuery вместо простого .ToObservable.

Эта ссылка поможет вам: jQuery + RxJS

...