Параметры нокаута 2.0 из привязки в неправильном порядке?

С нокаутом 2.0 с использованием этой привязки данных:

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

в модели просмотра Knockout JavaScript первый аргумент в

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

кажется скорее родительским, чем данными.

Есть ли причина для такого поведения или чего-то, что мне не хватает?

Ответ 1

Когда вы вызываете 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 в вашей модели просмотра. Это зависит от вашей структуры.

Ответ 2

Почему вы используете bind()? По умолчанию, если вы просто напишете имя функции javascript как событие клика, то Knockout передаст $data в качестве первого аргумента, а событие - как второе.

http://knockoutjs.com/documentation/click-binding.html (примечание 1 & 2)

Зачем беспокоиться с bind(), когда вы можете просто сделать это:

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