簡體   English   中英

下一個/上一個可觀察對象的導航

[英]Next/Previous navigation of an Observable

我有一個可觀察到的博客文章,是從數組轉換而成的:

let posts = Rx.Observable.fromArray(blogPosts)

下一個/上一個導航的按鈕單擊事件的兩個可觀察到的nextClicksprevClicks

我想要的是:

  1. 最初,可觀察的posts會發出第一條帖子,然后等待點擊事件
  2. nextClicks發出時, nextClicks posts發出下一個帖子(如果沒有下一個可用,則重復當前帖子)
  3. prevClicks發出時, posts發出prev post(如果沒有prev可用,則重復當前帖子)

我不確定這是否可能:

  1. 兩個觀測postNextablepostPrevable ,源自posts ,說明是否有下一個/上一個可用的后posts分別

提前致謝!

有1,2,3和4的幾種方法。對於數字4,我想知道您打算如何使用這些可觀察值。

僅使用純函數而不使用主題的一種方法是:

var blogPosts$ = Rx.Observable.just(blogPosts);
var index$ = Rx.Observable.merge(nextClicks, prevClicks)
             .withLatestFrom(blogPosts$, function(ev, blogPosts){return {posts: blogPosts, ev : ev};})
             .scan(function(index, posts_and_ev){
                     return isNextClick(posts_and_ev.ev) && isNextable(posts_and_ev.posts, index) ? index + 1 
                           :isPrevClick(posts_and_ev.ev) && isPrevable(posts_and_ev.posts, index) ? index - 1
                           :index
                   }, 0);
var currentPost$ = index$.withLatestFrom(blogPosts$, function (index, blogPost){return blogPost[index]; }).startWith(blogPosts[0]);
var postNextable = index$.withLatestFrom(blogPosts$, function (index, blogPost){return isNextable(blogPost, index);});
var postPrevable = index$.withLatestFrom(blogPosts$, function (index, blogPost){return isNextable(blogPost, index);})

您尋求的輸出在這里命名為currentPost$

此后包括代碼測試。 isNextableisNextClickisPrevableisPrevClick具有明顯的語義,並且易於編寫(例如,區分鍵代碼或按鈕ID,或者區分您的nextprev事件)。 樣例代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM