以不正确的顺序从绑定中删除2.0参数

Knockout 2.0 parameters from bind in incorrect order?

本文关键字:删除 参数 绑定 不正确 顺序      更新时间:2023-09-26

Knockout 2.0使用此数据绑定:

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

在Knockout视图模型JavaScript中中的第一个参数

self.deleteSomeEntity = function (data, parent) {
    // perform deletion
}

似乎是父项而不是数据。

这种行为是有原因的,还是我遗漏了什么?

当您调用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。这取决于你的结构。

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

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

既然你可以简单地做到这一点,为什么还要麻烦bind()呢:

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