あなたのストリームがトリガーされたかを知ることがなければ、これは「技術的には[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();
});
(これは解決しません最初の質問ですが、ちょっとヒントがあります)
誰かがカレンダーで日付を選択すると、ストリームがトリガーされます。 –
私は上記の最初の提案を実装し、期待どおりに動作します。本当にありがとう。初心者がrxjsで可能なことを知ることはとても難しいです。 –
ほとんどのことが可能です - この質問は、あなたのコードをどのように「完璧」にするかといった個人的な好みの問題に似ていますが、厳密には技術的な面では、あなたのコードは、 – olsn