knockoutjs - 在加载时触发参数的绑定

del*_*ree 63 knockout.js

我最近做了很多淘汰赛,我遇到了一个奇怪的事情.

正如你在这个小提琴http://jsfiddle.net/hqXjv/中看到的那样,当你设置一个绑定click: testMethod时,当单击该按钮时动作会触发.

正如你在这个小提琴http://jsfiddle.net/kxTzM/中看到的那样当你设置对click: testMethod('hi')动作的绑定时,单击按钮和页面加载时都会触发(我猜是在applyBindings上)

有一个参数不是重现问题的必要条件,如果您click: testMethod()在第一个小提琴中更改绑定,您会看到它是在页面加载时触发的.

虽然,是的,我可以为元素添加另一个属性并尝试将其用作参数,我的问题是,有没有办法将参数传递给knockoutjs绑定而不触发它们onload.如果这是一个错误,那么就这样吧,但我只是想知道一种避免它的方法.

Mar*_*son 96

我认为这个淘汰页面上的"注2"解释了这一切:

http://knockoutjs.com/documentation/click-binding.html

您可以通过以下方式避免此问题:

匿名功能:

<button data-bind="click: function(data, event) { myFunction(data, event, 'param1', 'param2') }">Click me</button>
Run Code Online (Sandbox Code Playgroud)

... 要么 ...

绑定方法:

<button data-bind="click: myFunction.bind($data, 'param1', 'param2')">Click me</button>
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的提示,但没有解释为什么在加载时触发click事件. (10认同)

atr*_*eon 22

以下执行加载时的单击功能

click: clickSpan()
Run Code Online (Sandbox Code Playgroud)

删除括号如下,该函数未执行onload

click: clickSpan
Run Code Online (Sandbox Code Playgroud)

(这在上面的注释2中解释,但它是隐秘的形式:-)