2012-04-30 15 views
5

yo estaba trabajando en algunas funciones de arrastrar/soltar y atribuía eventos a través de la forma estándar de Backbone:¿Por qué el obj del evento Backbone tiene propiedades faltantes?

events: { 
'dragenter': 'dragEnter', 
'dragend': 'dragEnd' 
...., 
..... 
} 

Noté en mi función de que el objeto event que se pasa a que no contiene algunas propiedades descritas en la especificación html5.

Específicamente, falta el obj dataTransfer obj.

Creé una demostración rápida a demonstrate my issue. Simplemente arrastre un archivo o algo sobre él para verlo en los registros.

Mi pregunta es ¿por qué sucede esto? Miré a través del documentation y parece que no puedo encontrarlo.

+0

Trate de eliminar la capa Backbone para ver si el problema está en jQuery: '$ (" # dom-element "). Bind (" dragenter ", function (event) {console.log (" event " , evento);}); ' – fguillen

+0

@fguillen Sí, eso funciona, las vinculaciones regulares de eventos js también funcionan. Solo tenía curiosidad por saber por qué está sucediendo –

+0

No sé, Backbone parece que delega en el enlace de eventos jQuery, [mira este código] (https://github.com/documentcloud/backbone/blob/master/backbone) .js # L1237-1254), por lo que el sistema de eventos de Backbone debería funcionar tan bien como el sistema de eventos de jQuery:/ – fguillen

Respuesta

12

Si está utilizando Backbone Eventos, Backbone pone una capa en la parte superior de el evento real. Si desea acceder al evento original, deberá usar: event.originalEvent.

En el evento original, encontrará dataTransfer.

+2

Esta es una respuesta mucho mejor que la que se ha aceptado – fuzzyvagina

0

eventos Backbone realidad se unen a la biblioteca de eventos Dom (jQuery, Zepto ...) por lo que se debe cargar jqueryui si desea que los eventos que pueden arrastrarse

+0

Si bien es cierto que vincula los eventos usando esos manipuladores DOM, simplemente al agregar jqUI no se soluciona el problema, al menos no en mi prueba –

+0

Dado que dataTransfer es nativo, puede acceder a él a través de su devolución de llamada: 'dragEnter: function (e) {dt = e.originalEvent.dataTransfer}' así que esto es lo que quise decir vinculando los eventos a jQuery – drinchev

+0

Ah. Ni siquiera se dio cuenta de que 'originalEvent' existió. –

Cuestiones relacionadas