[英]Next/Previous navigation of an Observable
我有一個可觀察到的博客文章,是從數組轉換而成的:
let posts = Rx.Observable.fromArray(blogPosts)
下一個/上一個導航的按鈕單擊事件的兩個可觀察到的nextClicks
和prevClicks
:
我想要的是:
posts
會發出第一條帖子,然后等待點擊事件 nextClicks
發出時, nextClicks
posts
發出下一個帖子(如果沒有下一個可用,則重復當前帖子) prevClicks
發出時, posts
發出prev post(如果沒有prev可用,則重復當前帖子) 我不確定這是否可能:
postNextable
和postPrevable
,源自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$
。
此后包括代碼測試。 isNextable
, isNextClick
, isPrevable
, isPrevClick
具有明顯的語義,並且易於編寫(例如,區分鍵代碼或按鈕ID,或者區分您的next
和prev
事件)。 樣例代碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.