knockoutjs – 与加载时触发的参数绑定

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

正如你可以在这个小提琴http://jsfiddle.net/hqXjv/看到,当你设置一个绑定click: testMethod然后点击该button时触发动作。

正如你可以在这个小提琴http://jsfiddle.net/kxTzM/看到,当你设置绑定click: testMethod('hi')这个动作触发当button被点击和页面加载(我猜对了applyBindings)

如果将绑定更改为在第一个提琴中click: testMethod() ,则会看到在页面加载时触发该参数。

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

我觉得在这个淘汰赛页面上的“注2”解释了一切:

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

您可以使用以下方法避免此问题:

匿名function:

 <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> 

下面执行加载时的点击function

 click: clickSpan() 

删除括号如下,函数没有执行onload

 click: clickSpan 

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

在以下情况下我遇到了这个问题:

  • 我正在运行Visual Studio 2013。
  • 我的淘汰赛项目是使用TypeScript 1.5。
  • 我正在使用Visual Studiodebugging器在chrome中运行我的项目。
  • 我没有重构一些代码,忽略重新编译或重新运行debugging器。

正因为如此,我相信发生了什么是我有不好的TypeScript,不会编译,只是我没有得到任何警告或错误的效果,编辑,我对我的TypeScript没有得到反映,生成的JavaScript文件。

其他人可能会看到这一点是不常见的,但是我猜想一个警告就是,如果你在运行VSdebugging器的时候编辑了TypeScript,你可能会遇到这种情况或者其他意外的行为。 我怀疑我创造了马克·罗宾逊在自动生成的js文件中描述的情况,但是我没有在我的TypeScript中看到这种情况。