2017-02-18 15 views
0

У меня есть два наблюдаемых. Один из них является постоянным потоком событий, а другой объединяет его с буфером.Можно ли ссылаться на излучение наблюдаемого, когда оно используется в качестве границы буфера?

var buttonClick = Rx.Observable.fromEvent(button, 'click') 
var mouseMove = Rx.Observable.fromEvent(document, 'mousemove') 


var action = mouseMove 
    .buffer(buttonClick) 
    .flatMap(x => x) 
    .map(p => { 

    // I need the last buttonClick emission here 

    }) 

var subscription = action.subscribe(x => { console.log(x) }) 

Как я могу получить доступ к текущей buttonClick внутри карты итерации? Мне нужно это, чтобы получить целевое свойство, связанное с событием DOM Observable.

Есть ли лучший способ сделать это?

ответ

0

Попробуйте combineLatest на небуферных ходов:

let move$ = mouseMove 
    .buffer(buttonClick) 
    .flatMap(x => x); 

var action = Observable.combineLatest(move$, buttonClick, (move, click) => {move, click}) 
.map(res => { //do smt with res.move and res.click }) 

Если вы устанавливаете минимальный пример в codepen или Pastebin, мы могли бы уточнить этот вопрос.

Что касается альтернативы, я думаю, что вам лучше работать с буферизованными ходами вместо того, чтобы раскладывать их. Вы избегаете комбинирования каждого хода с одним и тем же кликом, и вы всегда можете просто перебирать ходы, для этого не нужна карта:

let moves$ = mouseMove.buffer(buttonClick); 
let movesClick$ = Observable.zip(moves$, buttonClick, (moves, click) => {moves, click}); 
movesClick$.subscribe(res => { //iterate res.moves and use res.click })