使用Knockout 2.0使用此数据绑定:
data-bind="click: $root.deleteSomeEntity.bind($data, $parent)"
在Knockout viewmodel JavaScript中
中的第一个参数self.deleteSomeEntity = function (data, parent) {
// perform deletion
}
似乎是父母,而不是数据。
是否存在这种行为的原因或我遗漏的事情?
答案 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)}"