2016-03-28 11 views
2

私は現在Cycle.jsを使用しています。フォームの送信時にテキスト入力用のストリームを取得しようとしています。たとえば:RxJSストリームを最新の別のストリームにマップするにはどうすればよいですか?

const textChange$ = DOMSource.select('input').events('change'); 
const textValueSubmit$ = DOMSource.select('form').events('submit') 
    .do(ev => ev.preventDefault()); 

私はこの時点でストリームをマージする必要があると思うが、私は(ユーザーがフォームを提出した)最新のテキスト値を気に。この状況を処理する適切な方法は何ですか?

答えて

2

を探している機能であると信じて、あなたもwithLatestFromを使用する可能性を持っています。 combineLatestwithLatestFromセマンティクスは微妙な点で異なることに注意:

  • 合成源の一つは、(ソース観察シーケンスの各々は、少なくとも一つの元素に放出されたている限り)値を発するたびcombineLatest値を放出します

    :結合元は

だからあなたは、インスタンスのために行うことができ値を発したときにのみ

  • withLatestFromは値を出力します

    あなたの特定のユースケースを超えていない場合でも(ここではsubmitイベントで渡された値は気にしないのでsampleもうまく動作します)、これら2つの他の同様の将来のユースケースを考慮した演算子。

    最後に、combineLatestは本当にこの場合あなたのために働きますか? textChange$が発生するたびにtextValueSubmit$の排出量があるようです。それは意図された行動ですか?

  • +0

    良いキャッチ - combineLatestは、実際には私の意図ではなかったtextChange $ firesのたびに排出されています。 – SlyMcFly

    +0

    申し訳ありませんが、私はあなたと確認するのは当然でした。彼らが途中で役に立つときには、回答をupvoteすることを忘れないでください。それらは重要なSOのガイドラインです。また、答えが正しくない場合は、それを削除してスレッドの新規参入者が混乱しないようにすることをお勧めします。 – user3743222

    3

    あなたはまた、余分な機能を作成しないようにsample()を使用することができ、私は、これはあなたが現在の答えに追加

    const textChange$ = DOMSource.select('input').events('change') 
        .pluck('target', 'value') 
    const submit$ = DOMSource.select('form').event('submit') 
        .do(ev => ev.preventDefault) 
    const textValueSubmit$ = textChange$.sample(submit$) 
    
    関連する問題