首页 文章

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

提问于
浏览
56

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

正如您在http://jsfiddle.net/hqXjv/中设置绑定时可以看到的那样,当单击按钮时,操作将触发 .

正如你在http://jsfiddle.net/kxTzM/中设置绑定到http://jsfiddle.net/kxTzM/时所看到的那样,当单击按钮和页面加载时,动作都会触发(我猜是在applyBindings上)

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

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

3 回答

  • 17

    我认为这个淘汰页面上的“注2”解释了这一切:

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

    您可以通过以下方式避免此问题:

    Anonymous functions:

    <button data-bind="click: function(data, event) { myFunction(data, event, 'param1', 'param2') }">Click me</button>
    

    ... 要么 ...

    The bind method:

    <button data-bind="click: myFunction.bind($data, 'param1', 'param2')">Click me</button>
    
  • 3

    以下执行加载时的单击功能

    click: clickSpan()
    

    removing the brackets 如下所示,该函数未执行onload

    click: clickSpan
    

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

  • 90

    我遇到以下情况:

    • 我正在运行Visual Studio 2013 .

    • 我的淘汰赛项目使用的是TypeScript 1.5 .

    • 我使用Visual Studio调试器在chrome中运行我的项目 .

    • 我重构了一些代码并且忽略了重新编译或重新运行调试器 .

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

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

相关问题