Параметры нокаута 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)}"