RiotJS onclick在负载时触发

时间:2016-08-03 13:36:01

标签: javascript jquery onclick riot.js riotjs

我正在使用RiotJS编写一个表格应用程序,并且我一直遇到与onclick事件相同的问题。几乎每次我尝试使用

<tag onclick={somefunction}>

我的行为非常不稳定。有时它会在页面加载或更新时调用该函数很多次,然后根本不响应点击,有时它会在启动时多次触发。我似乎无法找出问题背后的模式,虽然我注意到它往往是在线函数调用的问题,例如

<tag onclick={console.log("foo")}>

并且参考传递<tag onclick={function}>的次数较少,尽管两者都有。有没有人经历过这样的事情?如果您需要更多背景信息,请发表评论。

1 个答案:

答案 0 :(得分:0)

在Riot中,{}表达式在安装/更新时进行评估。

这意味着如果{}内部的内容是函数调用,则每次更新挂载的标记时,它都将被执行,每次对其所在的部分进行求值时。

这与vanilla javascript不同,在点击该东西之前,甚至不会解析onclick。

这可能会导致一些混乱,因为Riot并不总是以你的思维方式解析{}表达式。复合表达式(具有布尔逻辑||&&等的表达式尤其麻烦。)

在这种情况下,Riot中的onclick正在寻找一个表达式/函数......它会尝试用标签本身来评估它......换句话说,就是这样:

<button onclick={foobar}>Click me!</button>

Riot会在点击时尝试执行this.foobar()

通常,我尝试通过在标记的<script>部分设置我的方法来利用这一点。这为我的{}表达式的错误解释留下了很小的空间,并且在脚本部分中将逻辑位移出标记的HTML部分并进入我期望的行为。