1

Rx.Observable.fromEvent(element, eventName)イベントをキャプチャする要素として jquery セレクションを使用する例はたくさんあります。ただし、Rx が jQuery を使用してフィルター処理されたイベント設定からのイベントのみをリッスンすることは可能ですか?

//Bind the event on body but only respond to events that match the filter
$('body').on('click', '.aClass div .something', function () {...});

//Bind to 'body' but only respond to events from the binding above
Rx.Observable.fromEvent(/*something here?*/);

私は効果的に似たものを思いつきましたが、jquery フィルターよりもはるかにコストがかかるようです。

Rx.Observable.fromEvent($('body'), 'click')
.filter(function (e) {
  return $(e.target).is('.aClass div .something');
})
.subscribe(function () {...});

jQuery バインディングをエミッターに変換し、そのイベント ストリームを Rx で使用する方法はありますか? 最善のアプローチは何ですか?

4

3 に答える 3

3

Rx.Observable.fromEventPatternを使用できます。

Rx.Observable.fromEventPattern(
  function add(handler) {
    $('body').on('click', '.aClass div .something', handler);
  },
  function remove(handler) {
    $('body').off('click', '.aClass div .something', handler);
  }
);

このようにして、監視可能なサブスクリプションからのサブスクライブ解除時にイベント ハンドラーが自動的に削除されます。

于 2016-05-05T17:53:22.127 に答える