我最近一直在做很多淘汰赛,我遇到了一个奇怪的事情。
正如您在设置click: testMethod
的绑定时可以在此小提琴http://jsfiddle.net/hqXjv/中看到的那样,单击该按钮时会触发该动作。
正如您在click: testMethod('hi')
设置绑定时可以看到这个小提琴http://jsfiddle.net/kxTzM/时,单击按钮和页面加载时都会触发操作(我猜是在applyBindings上)
如果在第一个小提琴中将绑定更改为click: testMethod()
,则不需要使用参数来重现问题,您会看到它是在页面加载时触发的。
虽然,是的,我可以为元素添加另一个属性并尝试将其用作参数,我的问题是,有没有办法将参数传递给knockoutjs绑定而不触发它们onload。如果这是一个错误,那么就这样吧,但我只是想知道一种避免它的方法。
答案 0 :(得分:92)
我认为"注2"在这个淘汰页面上解释了一切:
http://knockoutjs.com/documentation/click-binding.html
您可以使用以下方法来避免此问题:
匿名函数:
<button data-bind="click: function(data, event) { myFunction(data, event, 'param1', 'param2') }">Click me</button>
......或......
绑定方法:
<button data-bind="click: myFunction.bind($data, 'param1', 'param2')">Click me</button>
答案 1 :(得分:17)
以下执行了加载时的点击功能
click: clickSpan()
删除括号,如下所示,该函数未执行onload
click: clickSpan
(这在上面的注释2中有解释,但它是隐秘的形式: - )
答案 2 :(得分:3)
我在以下情况下碰到了这个:
正因为如此,我相信发生的事情是我有一个不能编译的错误的TypeScript,只是我没有得到任何警告或错误,并且我对我的TypeScript所做的编辑没有得到正确反映自动生成的JavaScript文件。
其他人可能会看到这一点的情况并不常见,但是,我想有一个警告是,如果您在运行VS调试器时编辑TypeScript,可能会遇到此问题或其他意外行为。我怀疑我已经创建了Mark Robinson在我自动生成的js文件中描述的情况,但我没有在我的TypeScript中看到它。