Ответ 1
Я только что протестировал следующее, и он работал безупречно:
var view = Backbone.View.extend({
// ... snip ...
events: {
'keyup :input': 'logKey'
,'keypress :input': 'logKey'
}
,logKey: function(e) {
console.log(e.type, e.keyCode);
}
});
Я бы вернулся и проверил ваш код. Все события в Backbone определяются как делегаты, присоединенные к элементу viewInstance.el
. Чтобы развязать события, вызовите viewInstance.remove()
, который вызывает $(viewInstance.el).remove()
под обложками и очищает все делегированные события.
Также обратите внимание, что в некоторых браузерах (как я полагаю, Firefox) есть известная проблема, что некоторые клавиши (например, клавиши со стрелками) не пузырятся и не будут работать должным образом с делегированными событиями keypress
. Если вы используете специальные клавиши, вам, вероятно, лучше использовать keyup
и keydown
.