RxJSを使用して、イベントを購読します。問題は:イベントリスナーが設定される前にObservableをセットアップしたい。RxJSはイベントを受信しますが、後でイベントリスナーを接続します
これは2つのボタンのように考える:Button1はクリックされたときに何かをするが、button2がbutton1にイベントリスナーをアタッチした後にのみ何かをする。オブザーバーは、button1のclickイベントにサブスクライブする必要があります。このすべては、アプリの起動時に一緒に配線する必要があります。 Button2はオブザーバを設定すべきではありません! RxJSのないいくつかのコード:
button2.addEventListener('click', function() {
// [...] some code to prevent that button1 has more than one event listener
// attach event listener to button1
button1.addEventListener('click', clickHandler);
// now let observer subscribe itself to clickHandler somehow
// -> HOW?
});
function clickHandler() {
console.log("clicked");
}
編集:たぶん、何かを発することはありませんダミーのイベントハンドラのいくつかの種類を観察することが可能ですが、ボタン2がクリックされた後、実際のイベントハンドラ(clickHandler
)に変わるか、そのような何か?!
Edit2:2つのボタンが最良の例ではないことに気付きました。それを違うものにして、button2のイベントリスナーを未知のメカニズムでアタッチさせましょう。たとえば、次のように
// is called by unkown means, i. e. the observer doesn't know how and when its attached
function attach() {
button1.addEventListener('click', clickHandler);
}
しかしattach()
が呼び出されたときに、観察者はclickHandler
に加入する必要があります。あるいはObserverがいつも何らかの関数に登録されていて、attach()
が実際のイベントリスナで関数を取り替えるかもしれません。ダニー。
感謝。 button2でイベントリスナーが接続されていない場合はどうすればよいでしょうか?これは 'take(1)'と 'skipUntil()'がなければどのように動作しますか?私の質問のEdit2を参照してください。 – ntaso
あなたの編集に関する第2の例を追加しました。 'Subject'を使ってリスナーに「添付」します。このためのボタンは必要ありません。例をテストするためだけです。そしてなぜあなたは 'skipUntil'なしでそれをしますか? RxJを使用する場合は、そのメソッドを使用する必要があります。 – cyrix