2016-12-21 14 views
0

によると、私は、次の機能を持っています。は、反応性官能パラダイム

switchMapメソッドを見ると、ボタンが押されているかどうかを尋ねています。

私は閉じた内部のボタンの状態を尋ねるとき、私は反応的な機能のパラダイムを壊すのですか?

.switchMap(function (oCalendar) { 
     return oEditButton.getPressed()? Rx.Observable.of(oCalendar) : Rx.Observable.never(); 
    }) 

答えて

1

あなたのストリームがトリガーされたかを知ることがなければ、これは「技術的には[OK]を」である、しかし、あなたはおそらくすでに推測として、あなたは一種の非ストリームを導入することで、純粋な、ステートレスな機能を有するの「精神」を壊しています-state、oEditButton - 何らかの「外部」状態(ボタンが押されているかどうか)があるため、ストリームは毎回同じ入力で同じ結果を持つことが保証されません。

したがって、「クリーナー」のアプローチは、oEditButtonClicked$ -event-streamのようなものを持つように(アプリケーションでうまくいくかどうかはわかりません)、選択した日付の処理をトリガーします。サイドノートとして

oEditButtonClicked$ 
    .switchMapTo(oCalenderSelect$) 
    .mergeMap(cal => Rx.Obserbalbe.from(cal.getSource....)) 

あなたはそのイベントストリームを導入することができない場合、あなたはまだskipWhileを使用してコードを向上させることができます:

return oCalendarSelectOb 
    .skipWhile(() => oEditButton.getPressed()) 
    .mergeMap(function (oCalendar) { 
     return Rx.Observable.from(oCalendar.getSource().getSelectedDates()); 
    }) 
    .map(function (oDateRange) { 
     return oDateRange.getStartDate(); 
    }); 

(これは解決しません最初の質問ですが、ちょっとヒントがあります)

+0

誰かがカレンダーで日付を選択すると、ストリームがトリガーされます。 –

+0

私は上記の最初の提案を実装し、期待どおりに動作します。本当にありがとう。初心者がrxjsで可能なことを知ることはとても難しいです。 –

+1

ほとんどのことが可能です - この質問は、あなたのコードをどのように「完璧」にするかといった個人的な好みの問題に似ていますが、厳密には技術的な面では、あなたのコードは、 – olsn

関連する問題