Backbone.js - Добавление событий keydown, когда представление активно? - PullRequest
15 голосов
/ 18 августа 2011

У меня есть представление под названием галерея, варианты. Я хочу слушать и реагировать на события нажатия клавиш, когда галерея отображается (пока она не закрыта).

Как мне это сделать в магистральных событиях? Я перепробовал все варианты «keydown X»: функция, и ни одна из них не сработала.

1 Ответ

22 голосов
/ 16 сентября 2011

Я только что проверил следующее, и оно работало безупречно:

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.

...