Cycle.js / xstream点击事件流一次,但是两次点击

时间:2016-10-15 21:41:18

标签: cyclejs xstream-js

页面上有一个按钮元素,下面是点击流:

let submitClick$ = sources.DOM.select(buttonSel)
  .events("click")
  .mapTo(true)
  .debug(console.log)

点击按钮后,会记录true,这是正确的。

但是,当我映射流时,里面的代码会运行两次:

let submitDeal$ = submitClick$.map(() => {
  console.log("Clicked")
  // ...
})

该按钮不应附加其他事件处理程序,并且元素本身位于div:

button(".btn--add", "Submit")

通常event.preventDefault()event.stopPropagation()没有区别,检查事件确实显示它是从同一元素button.btn--add触发的。

不确定发生了什么,任何想法都表示赞赏!谢谢!

版本:

"@cycle/dom": "^12.2.5"
"@cycle/http": "^11.0.1"
"@cycle/xstream-run": "^3.1.0"
"xstream": "^6.4.0"

更新1:我检查了三次,没有加载两次JS文件。我正在使用Webpack捆绑在页面上加载的单个app.js文件(Elixir / Phoenix应用程序)。此外,在检查Chrome开发人员工具的Event Listeners标签中的按钮时,似乎只附加了1个事件。

更新2: Gist with the code

2 个答案:

答案 0 :(得分:0)

提供的信息太少,无法解决此问题。但有些事情会浮现在脑海中:

您不应该使用.debug(console.log)而是使用.debug(x => console.log(x))。实际上.debug()就足够了,它将在内部使用console.log。

然后,<form>内的按钮是?这可能会影响事件。一般来说,这个问题需要更多细节。

答案 1 :(得分:0)

原来这是由于xstream中的一个错误,已在xstream@7.0.0中修复。