Отбрасывание событий нажатия кнопки до тех пор, пока последнее событие сброса не будет работать

Используя 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,

Другие вопросы по тегам