Skip to content
This repository has been archived by the owner on Apr 20, 2018. It is now read-only.

Latest commit

 

History

History
140 lines (111 loc) · 4.01 KB

fromeventpattern.md

File metadata and controls

140 lines (111 loc) · 4.01 KB

Rx.Observable.fromEventPattern(addHandler, [removeHandler], [selector])

Creates an observable sequence by using the addHandler and removeHandler functions to add and remove the handlers, with an optional selector function to project the event arguments.

Arguments

  1. addHandler (Function): The DOMElement, NodeList or EventEmitter to attach a listener.
  2. [removeHandler] (Function): The optional function to remove a handler from an emitter.
  3. [selector] (Function): A selector which takes the arguments from the event handler to produce a single item to yield on next.

Returns

(Observable): An observable sequence of events from the specified element and the specified event.

Example

Wrapping an event from jQuery

var input = $('#input');

var source = Rx.Observable.fromEventPattern(
  function add (h) {
    input.bind('click', h);
  },
  function remove (h) {
    input.unbind('click', h);
  }
);

var subscription = source.subscribe(
  function (x) {
    console.log('Next: Clicked!');
  },
  function (err) {
    console.log('Error: %s', err);
  },
  function () {
    console.log('Completed');
  });

input.trigger('click');

// => Next: Clicked!

Wrapping an event from the Dojo Toolkit

require(['dojo/on', 'dojo/dom', 'rx', 'rx.async', 'rx.binding'], function (on, dom, rx) {

  var input = dom.byId('input');

  var source = Rx.Observable.fromEventPattern(
    function add (h) {
      return on(input, 'click', h);
    },
    function remove (_, signal) {
      signal.remove();
    }
  );

  var subscription = source.subscribe(
    function (x) {
      console.log('Next: Clicked!');
    },
    function (err) {
      console.log('Error: ' + err);
    },
    function () {
      console.log('Completed');
    });

  on.emit(input, 'click');
  // => Next: Clicked!
});

Using in Node.js with using an EventEmitter.

var EventEmitter = require('events').EventEmitter,
    Rx = require('rx');

var e = new EventEmitter();

// Wrap EventEmitter
var source = Rx.Observable.fromEventPattern(
  function add (h) {
    e.addListener('data', h);
  },
  function remove (h) {
    e.removeListener('data', h);
  },
  function (foo, bar) {
    return foo + ',' + bar;
  }
);

var subscription = source.subscribe(
  function (result) {
    console.log('Next: %s', result);
  },
  function (err) {
    console.log('Error: ' + err);
  },
  function () {
    console.log('Completed');
  });

e.emit('data', 'foo', 'bar');
// => Next: foo,bar

Location

File:

Dist:

Prerequisites:

NPM Packages:

NuGet Packages:

Unit Tests: