Передача объекта события в функцию Knockout.js

Я использую bind для вызова функции с параметрами из моего представления:

<span data-bind="click: modifyByOne.bind($data, 'plus')"></span>

В соответствии с этим ответом я получаю объект event, делая следующее:

self.modifyByOne = function(type){
    var span = $(event.currentTarget);
};

В Chrome все работает нормально, но в Firefox я получаю следующую ошибку консоли:

событие не определено

Как я могу заставить его работать и в Firefox? Документация Knockout не дает много ответов на этот вопрос.


person Alvaro    schedule 10.03.2016    source источник
comment
Код в вашем вопросе использует переменную (?) с именем event, но неясно, откуда она взялась.   -  person Jeroen    schedule 10.03.2016


Ответы (2)


Привязка нокаутирующего клика передает методу прослушивателя два аргумента: текущий контекст привязки ($data) и событие.

Используя bind, вы можете, как и вы, указать дополнительные аргументы для передачи методу. Эти аргументы передаются перед двумя аргументами по умолчанию. Таким образом, ваш метод должен принимать аргумент типа, данных и события.

self.modifyByOne = function(type, data, event){
  var span = $(event.target);
};

Хотя это должно работать, считается плохой практикой делать что-то с DOM из вашего кода. Попробуйте вместо этого создать собственную привязку.

person user3297291    schedule 10.03.2016
comment
Отличное объяснение! Спасибо! - person Alvaro; 10.03.2016

Вы не объявляете параметр event в сигнатуре своей функции. Но помимо этого, если вам нужно получить доступ к фактическому элементу DOM в Knockout, вы должны использовать собственный обработчик привязки; вы не должны получать доступ к DOM изнутри вашей модели представления.

person Cody Sand    schedule 10.03.2016