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中看到这种情况。