2012-04-30 2 views
5

я работал на какой-то перетащить/функциональность перетаскивания и прикрепление события через стандартный способ Backbone:Почему у объекта Backbone obj отсутствуют свойства?

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

я заметил в моей функции, что event объект, который передается в него не содержит некоторые свойства, описанные в спецификация html5.

В частности, отсутствует dataTransfer obj.

Я создал небольшую демонстрационную версию до demonstrate my issue. Просто перетащите файл или что-то в нем, чтобы увидеть его в журналах.

Мой вопрос: почему это происходит? Я просмотрел documentation и не могу найти его.

+0

Попробуйте удалить слой Backbone, чтобы узнать, есть ли проблема в jQuery: '$ (" # dom-element "). Bind (" dragenter ", function (event) {console.log (" event " , event);}); ' – fguillen

+0

@fguillen yeah, который работает, регулярные привязки событий js также работают. Мне было любопытно, почему это происходит –

+0

Я не знаю, Backbone выглядит так, как будто он делегирует привязку событий jQuery, [смотрите этот код] (https://github.com/documentcloud/backbone/blob/master/backbone .js # L1237-1254), поэтому система событий Backbone должна работать так хорошо, как система событий jQuery:/ – fguillen

ответ

12

Если вы используете магистральная События, Backbone помещает слой поверх фактическое событие. Если вы хотите получить доступ к исходному событию, вам придется использовать: event.originalEvent.

В оригиналеEvent вы найдете dataTransfer.

+2

Это гораздо лучший ответ, чем тот, который был принят – fuzzyvagina

0

Магистральные события на самом деле связать события в ваш Дом библиотеки (JQuery, Zepto ...), так что вы должны загрузить jqueryui если вы хотите перетаскивать события

+0

Хотя верно, что она связывает события с помощью этих манипуляторов DOM, просто добавление jqUI не устраняет проблему, по крайней мере, не в моем тестировании. –

+0

Поскольку dataTransfer является родным, вы можете получить к нему доступ через ваш обратный вызов: 'dragEnter: function (e) {dt = e.originalEvent.dataTransfer}', поэтому это то, что я имел в виду, привязывая события к jQuery – drinchev

+0

. Даже не понимал, что существует 'originalEvent'. –

Смежные вопросы