来自绑定的Knockout 2.0参数的顺序不正确?

时间:2012-02-16 14:02:04

标签: javascript knockout.js

使用Knockout 2.0使用此数据绑定:

data-bind="click: $root.deleteSomeEntity.bind($data, $parent)"

在Knockout viewmodel JavaScript中

中的第一个参数
self.deleteSomeEntity = function (data, parent) {
    // perform deletion
}

似乎是父母,而不是数据。

是否存在这种行为的原因或我遗漏的事情?

2 个答案:

答案 0 :(得分:12)

当您致电bind时,第一个参数将是this的值。因此,在您的通话中,this将为$data,第一个参数将为$parent

如果$root在这种情况下为$parent,那么您可以这样做:

$root.deleteSomeEntity.bind($root)

KO会将数据作为第一个参数传递,this将设置为$root

如果$parent不是$root(并且您可能不希望依赖this作为根目录中方法$root的其他对象),那么你会做类似的事情:

$root.deleteSomeEntity.bind($root, $data, $parent)

否则,肯定有一些方法可以确保您的视图模型中具有正确的this。这取决于你的结构。

答案 1 :(得分:2)

您为什么使用bind()?默认情况下,如果您只是将javascript函数的名称写为click事件,Knockout将传递$data作为第一个参数,将事件作为第二个参数。

http://knockoutjs.com/documentation/click-binding.html(注1和2)

为什么只需执行此操作就可以打扰bind()

data-bind="click: function() {$root.deleteSomeEntity($data, $parent)}"