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

时间:2012-03-27 14:12:58

标签: knockout.js

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

正如您在设置click: testMethod的绑定时可以在此小提琴http://jsfiddle.net/hqXjv/中看到的那样,单击该按钮时会触发该动作。

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

如果在第一个小提琴中将绑定更改为click: testMethod(),则不需要使用参数来重现问题,您会看到它是在页面加载时触发的。

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

3 个答案:

答案 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)

我在以下情况下碰到了这个:

  • 我正在运行Visual Studio 2013。
  • 我的淘汰赛项目使用的是TypeScript 1.5。
  • 我使用Visual Studio调试器在chrome中运行我的项目。
  • 我重构了一些代码并且忽略了重新编译或重新运行调试器。

正因为如此,我相信发生的事情是我有一个不能编译的错误的TypeScript,只是我没有得到任何警告或错误,并且我对我的TypeScript所做的编辑没有得到正确反映自动生成的JavaScript文件。

其他人可能会看到这一点的情况并不常见,但是,我想有一个警告是,如果您在运行VS调试器时编辑TypeScript,可能会遇到此问题或其他意外行为。我怀疑我已经创建了Mark Robinson在我自动生成的js文件中描述的情况,但我没有在我的TypeScript中看到它。