2016-09-19 13 views
0

Используя cyc.js и xstream, я хотел бы подсчитать нажатие кнопок и их сброс.Отбрасывание событий нажатия кнопок до тех пор, пока не будет выполнено последнее событие сброса

Я планировал достичь этого, посчитав все нажатия кнопок после последнего сброса. Чтобы сделать это, я подумал о том, чтобы сбросить все нажатия кнопок до последнего сброса и подсчитать, что осталось.

Однако я остался с 2-мя кнопками, которые не работают

Любые советы?

function main(sources: ISources): ISinks { 
    const dom = sources.dom; 
    const resetClick$ = dom.select("#resetButton") 
    .events("click") 
    .map(ev => 0) 
    .startWith(0) 

    const button1Click$ = dom.select("#button1") 
    .events("click") 
    .compose(dropUntil(resetClick$.last())) 
    .map(ev => 1) 
    .fold((acc, n) => acc + n, 0) 
    .startWith(0) 

    const button2Click$ = dom.select("#button2") 
    .events("click") 
    .compose(dropUntil(resetClick$.last())) 
    .map(ev => 1) 
    .fold((acc, n) => acc + n, 0) 
    .startWith(0) 

    const vtree$ = Stream.combine(button1Click$, button2Click$) 
    .map(n => 
     div([ 
     input("#button1", { attrs: { type: "button", value: "Click Me!"}}), 
     input("#button2", { attrs: { type: "button", value: "Click Me!"}}), 
     input("#resetButton", { attrs: { type: "button", value: "Reset!"}}), 
     p(["Clicks: " + n[0] + " + " + n[1]]), 
     p(["Click total: " + (n[0] + n[1])]) 
     ]) 
    ) 

    const sinks: ISinks = { 
    dom: vtree$ 
    }; 
    return sinks; 
} 

ответ

1
const resetClick$ = dom.select("#resetButton") 
    .events("click") 
    .map(ev => 0) 

const button1Click$ = dom.select("#button2") 
    .events("click") 
    .map(ev => 1) 

const button1WithReset$ = Stream.merge(button1Click, resetClick$) 
    .fold((acc, n) => { 
     if (n == 0) return 0 
     else return acc + n 
    }, 0) 

Это должно сделать трюк. Затем вы можете сделать то же самое для button2Click.

Объединяя button1click$ и resetClick$ мы получаем поток, который либо излучает 0 или 1. И используя fold, мы можем сбросить счетчик каждый раз, когда наш объединенный поток испускает 0.

 Смежные вопросы

  • Нет связанных вопросов^_^