2016-03-28 27 views
2

Şu anda Cycle.js kullanıyorum ve bir form gönderildiğinde bir metin girişi için bir akış elde etmeye çalışıyorum. Örneğin:RxJS Akışı farklı bir akışın en son nasıl eşleştirilir?

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

Ben bu noktada akışları birleştirmek gerektiğini düşünüyorum ama sadece son metin değerinin (kullanıcı formu sunmuştur olduğunda) önemsiyorum. Bu durumu ele almanın uygun yolu nedir?

cevap

2

aradığınız işlevselliği olduğuna inanıyoruz, ayrıca withLatestFrom kullanmasının mümkün. combineLatest ve withLatestFrom anlam ince noktalarda farklıdır Not:

    combineLatest Birleştirilen kaynaklardan biri bir değer verir her bir değer yayacaktır
  • (yayılan olan çok uzun bir kaynak gözlemlenebilir dizilerin her biri en az bir element)

    : birleştirerek kaynak

Yani örneğin yapabileceği bir değeri yayar yalnızca

  • withLatestFrom bir değer yayacaktır

    Bu durum, kullanım durumunuzdan daha fazlasını kapsamaz (burada, gönderilen etkinliğin gönderdiği değerle ilgilenmezseniz, önerilen sample da işe yararsa), bu ikisini de korumak iyi olur. Başka bir benzer gelecek kullanım durumu için akılda operatörler.

    Son olarak, bu durumda sizin için combineLatest gerçekten işe yarıyor mu? textChange$ yangınları her defasında bir textValueSubmit$ emisyonuna sahip olacaksınız. Amaçlanan davranış bu mu?

  • +0

    İyi yakalama - birleştirmeLatest gerçekten her zaman textChange $ yangınları nedeniyle işe yaramıyor, bu benim niyetim değildi. – SlyMcFly

    +0

    tamam, o zaman seninle görüşmek için haklıymışım. Bu arada yararlı olduklarında cevaplar vermeyi unutmayın. Bunlar önemli SO yönergeleridir. Ayrıca, eğer cevabınız doğru değilse, onu çıkarmanız gereken iyi bir uygulamadır. – user3743222

    3

    Ayrıca ekstra fonksiyonunu yaratmaktan kaçınmak için sample() kullanabilirsiniz, bu geçerli cevaplara ekleme

    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$) 
    
    İlgili konular