2011-08-18 19 views
15

Tengo una vista llamada galería de opciones. Quiero escuchar y actuar en los eventos de selección cuando se renderiza la galería (hasta que esté cerrada).Backbone.js - ¿Agregar eventos de selección cuando la vista está activa?

¿Cómo puedo hacer esto en los eventos de la red troncal? He intentado todas las variaciones de 'keydown X': function y ninguna ha funcionado.

+0

¿Su galería es la vista principal o la independiente html + js? –

+0

Es una vista de red troncal. –

+0

muéstrenos sus selectores para eventos 'keydown' ... creo que los vincula a elementos incorrectos –

Respuesta

22

Acabo de probar lo siguiente y funcionó a la perfección:

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

Me gustaría volver y comprobar su código. Todos los eventos en Backbone se definen como delegados adjuntos al elemento viewInstance.el. Para desvincular los eventos, llame al viewInstance.remove() que llama al $(viewInstance.el).remove() debajo de las cubiertas y limpia todos los eventos delegados.

También tenga en cuenta que en algunos navegadores (creo que Firefox) hay un problema conocido de que algunas teclas (como las teclas de flecha) no burbujean y no funcionan correctamente con los eventos delegados keypress. Si está capturando claves especiales, probablemente sea mejor que use keyup y keydown.

+2

¿No es esto hacer suposiciones de que la Vista en cuestión contiene entradas? Creo que el OP estaba preguntando sobre el caso en el que simplemente se renderiza una vista en particular: imagine que hay una imagen lightbox o algo así como que desea conectar "Escape" para cerrar la imagen ... –

+2

Tiene razón. Mi solución asume que hay elementos de entrada. Si desea actuar sobre eventos clave en cualquier lugar de la vista, simplemente excluya el selector (como lo indica la documentación de Backbone). 'events: {keyup: 'logKey'}' – fearphage

+9

- No puedo hacer que estas teclas/keyup/keydown globales funcionen. ¿Hay algún otro detalle menor que debo estar olvidando? ¿Podría indicar una referencia o incluso un violín para obtener más información sobre los eventos de todo el documento? – streetlight

Cuestiones relacionadas