È possibile? Qualcosa di simile a questo:come allegare evento a <body> utilizzando backbone.js?
...
events {
'keydown body' : 'doSmth'
}
...
È possibile? Qualcosa di simile a questo:come allegare evento a <body> utilizzando backbone.js?
...
events {
'keydown body' : 'doSmth'
}
...
Questo non è possibile perché Backbone utilizza gli eventi di hash per sottoscrivere gli eventi sul elemento della vista (proprietà view.el) e l'elemento di discendenti. Non si abbona agli eventi da elementi esterni all'elemento della vista.
Quindi se l'elemento della vista è tabella, la funzione doSomething() verrà chiamata quando l'evento keydown viene generato sulla tabella, ma non verrà chiamato se l'evento keydown viene attivato su un altro elemento della pagina.
generale keydown su 'html' dovrebbe funzionare, vedi questa domanda:
Tuttavia, è generalmente meglio avere gli eventi in un backbone Guarda vengono attivati da elementi nella vista el. In questo caso si potrebbe rendere il vostro generale a livello di app View accetta ingressi KeyDown:
events: {
'keydown': 'doSomething'
}
Basta associarlo utilizzando un framework come jQuery all'interno del metodo di inizializzazione della vista.
var View = Backbone.View.extend({
initialize: function() {
_.bindAll(this, "keyPress");
$(document).bind('keydown', this.keyPress);
},
keyPress: function(e) {
console.log(e.keyCode);
alert(e.keyCode);
return false;
}
});
Non dimenticare di sciogliere, è importante; è possibile controllare in keyPress per vedere se la vista è ancora nel DOM (Document) utilizzando $(document).find(this.$el).size()
if($(document).find($(this.options.container)).size() <= 0) {
alert("view not in document");
$(document).unbind('keydown', this.keyPress);
}else {
alert("view is here");
}
ne dite di vista che ha il 'el = $ ("corpo")'? Non che mi piacerebbe più - solo per il gusto di farlo/la curiosità. –
@PLJ se el è $ ("body"), allora dovrebbe funzionare. Non conosco molte viste Backbone che hanno il corpo come elemento. – Paul