Je me demandais s'il est possible de lier plusieurs types d'événements dans la colonne vertébrale dans une seule ligne.
Considérer ce qui suit:
var MyView = Backbone.View.extend({
id: 'foo',
events: {
'click .bar': 'doSomething',
'touchstart .bar': 'doSomething'
},
doSomething: function(e) {
console.log(e.type);
}
});
Fondamentalement, ce que je me demande, c'est s'il est possible de combiner la liaison de l'événement pour "Cliquez" et "Touchstart" en une seule ligne - dans le sens de:
events: { 'click,touchstart .bar': 'doSomething' }
Toute suggestion serait appréciée.
Il est impossible pour vues JQuery Events, qui sont liés delegateEvents
. C'est possible pour les événements de la colonne vertébrale , cependant:
book.on("change:title change:author", ...);
Nous pourrions également le faire comme ci-dessous. Avec l'avantage de gérer l'espace entre chaque événement.
Ajoutez-le directement dans la colonne vertébrale:
delegateEvents: function(events) {
events || (events = _.result(this, 'events'));
if (!events) return this;
this.undelegateEvents();
for (var key in events) {
var method = events[key];
if (!_.isFunction(method)) method = this[method];
if (!method) continue;
var match = key.match(delegateEventSplitter);
this.delegate(match[1], match[2], _.bind(method, this));
}
return this;
}
Présélectionnez la méthode des délégateurs:
Backbone.View.prototype.originalDelegateEvents = Backbone.View.prototype.delegateEvents;
Backbone.View.prototype.delegateEvents = function(events) {
events || (events = _.result(this, 'events'));
if (!events) return this;
this.undelegateEvents();
for (var key in events) {
var method = events[key], combinedEvents = key.split(',');
if (!_.isFunction(method)) method = this[method];
if (!method) continue;
for(var i = 0, match = null; i < combinedEvents.length; ++i) {
match = combinedEvents[i].trim().match(/^(\S+)\s*(.*)$/);
this.delegate(match[1], match[2], _.bind(method, this));
}
}
return this;
};
Nous pourrions maintenant gérer des événements dans une ligne:
events: {
'click a[data-anchor], wheel, keydown': 'scroll'
}