2011-08-18 9 views
15

Ho una vista chiamata galleria che opzioni. Voglio ascoltare e agire sugli eventi keydown quando la galleria viene renderizzata (finché non viene chiusa).Backbone.js - Aggiunta di eventi keydown quando la vista è attiva?

Come si fa in caso di eventi di dorsale? Ho provato tutte le varianti di 'keydown X': funzione e nessuna ha funzionato.

+0

La tua galleria è vista backbone o html standalone + js? –

+0

È una vista backbone. –

+0

mostraci i tuoi selettori per eventi 'keydown' ... penso che li leghino a elementi errati –

risposta

22

Ho appena verificato le seguenti e ha funzionato perfettamente:

var view = Backbone.View.extend({ 
    // ... snip ... 
    events: { 
    'keyup :input': 'logKey' 
    ,'keypress :input': 'logKey' 
    } 
    ,logKey: function(e) { 
    console.log(e.type, e.keyCode); 
    } 
}); 

Mi piacerebbe tornare indietro e controllare il codice. Tutti gli eventi in Backbone sono definiti come delegati collegati all'elemento viewInstance.el. Per dissipare gli eventi, chiama lo viewInstance.remove() che chiama $(viewInstance.el).remove() sotto le coperte e pulisce tutti gli eventi delegati.

Si noti inoltre che in alcuni browser (credo di Firefox) esiste un problema noto che alcune chiavi (come i tasti freccia) non presentano bolle e non funzioneranno correttamente con gli eventi delegati keypress. Se stai prendendo le chiavi speciali, probabilmente stai meglio usando keyup e keydown.

+2

Non è questo il presupposto che la vista in questione contenga input? Penso che l'OP chiedesse del caso in cui una vista particolare è semplicemente resa - immagina che ci sia un'immagine in lightbox o qualcosa del genere e vuoi collegare "Escape" alla chiusura dell'immagine ... –

+2

Hai ragione. La mia soluzione presuppone che ci siano elementi di input. Se si desidera agire sugli eventi chiave in qualsiasi punto della vista, è sufficiente escludere il selettore (come indica la documentazione Backbone). 'eventi: {keyup: 'logKey'}' – fearphage

+9

- Non riesco a far funzionare questi keypress/keyup/keydown globali. C'è qualche altro piccolo dettaglio che devo dimenticare? Potresti indicare un riferimento o anche un violino per ulteriori informazioni sugli eventi a livello di documento – streetlight

Problemi correlati