我最近做了很多淘汰赛,我遇到了一个奇怪的事情 .
正如您在http://jsfiddle.net/hqXjv/中设置绑定时可以看到的那样,当单击按钮时,操作将触发 .
正如你在http://jsfiddle.net/kxTzM/中设置绑定到http://jsfiddle.net/kxTzM/时所看到的那样,当单击按钮和页面加载时,动作都会触发(我猜是在applyBindings上)
如果在第一个小提示符中将绑定更改为 click: testMethod()
,则无需使用参数来重现问题,您会看到它是在页面加载时触发的 .
虽然,是的,我可以为元素添加另一个属性并尝试将其用作参数,我的问题是,有没有办法将参数传递给knockoutjs绑定而不触发它们onload . 如果这是一个错误,那么就这样吧,但我只是想知道一种避免它的方法 .
3 回答
我认为这个淘汰页面上的“注2”解释了这一切:
http://knockoutjs.com/documentation/click-binding.html
您可以通过以下方式避免此问题:
Anonymous functions:
... 要么 ...
The bind method:
以下执行加载时的单击功能
removing the brackets 如下所示,该函数未执行onload
(这在上面的注释2中解释,但它是隐秘的形式:-)
我遇到以下情况:
我正在运行Visual Studio 2013 .
我的淘汰赛项目使用的是TypeScript 1.5 .
我使用Visual Studio调试器在chrome中运行我的项目 .
我重构了一些代码并且忽略了重新编译或重新运行调试器 .
因此,我相信所发生的事情是我有一个不能编译的坏TypeScript,只是我没有收到任何警告或错误,并且我对我的TypeScript所做的编辑没有得到正确的反映 . 生成的JavaScript文件 .
其他人会看到这一点可能并不常见,但是,我想一句警告是,如果您在运行VS调试器时编辑TypeScript,可能会遇到此问题或其他意外行为 . 我怀疑我已经创建了Mark Robinson在我自动生成的js文件中描述的情况,但我没有在我的TypeScript中看到它 .