使用Knockout 2.0使用此数据绑定:
data-bind="click: $root.deleteSomeEntity.bind($data, $parent)"
在Knockout viewmodel JavaScript中的第一个参数
self.deleteSomeEntity = function (data, parent) {
// perform deletion
}
似乎是父母而不是数据。
是否有这种行为的原因或我遗漏的东西?
使用Knockout 2.0使用此数据绑定:
data-bind="click: $root.deleteSomeEntity.bind($data, $parent)"
在Knockout viewmodel 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方法中,然后你会做类似的事情:
$root.deleteSomeEntity.bind($root, $data, $parent)
否则,肯定有办法确保你有正确的 this
在您的视图模型中。这取决于你的结构。
你打电话时 bind
第一个参数将是值 this
。所以,在你的电话中 this
将会 $data
第一个参数将是 $parent
。
如果 $root
是 $parent
在这种情况下,你可以这样做:
$root.deleteSomeEntity.bind($root)
KO将数据作为第一个参数传递 this
将被设置为 $root
。
如果 $parent
不是 $root
(而且你可能不想依赖 this
是一个不同的对象 $root
在你的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)}"