2012-04-30 18 views
5

Pracowałem na niektórych funkcjonalności drag/drop i został mocowania wydarzenia poprzez standardowy sposób Backbone:Dlaczego obiekt zdarzenia Backbone ma brakujące właściwości?

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

zauważyłem w mojej funkcji, że obiekt event który jest przekazywany do niej nie zawierają pewne właściwości określonych w specyfikacja html5.

W szczególności brakuje obiektu dataTransfer.

Stworzyłem szybkie demo do demonstrate my issue. Po prostu przeciągnij plik lub coś nad nim, aby zobaczyć go w dziennikach.

Moje pytanie brzmi: dlaczego tak się dzieje? Przejrzałem documentation i nie mogę tego znaleźć.

+0

Spróbuj usunąć warstwę szkieletu, aby sprawdzić, czy problem dotyczy samej jQuery: '$ (" # dom-element "). Bind (" dragenter ", funkcja (zdarzenie) {console.log (" zdarzenie ") , event);}); ' – fguillen

+0

@ fguillen yeah, który działa, regularne powiązania zdarzeń js również działają. Byłem po prostu ciekawy dlaczego nie dzieje się tak –

+0

, szkielet wygląda tak, jakby delegował do wiązania zdarzeń jQuery, [zobacz ten kod] (https://github.com/documentcloud/backbone/blob/master/backbone .js # L1237-1254), więc system zdarzeń Backbone powinien działać tak dobrze, jak system zdarzeń jQuery:/ – fguillen

Odpowiedz

12

Jeśli używasz szkieletową Imprezy, Backbone kładzie się warstwę na wierzchu rzeczywiste wydarzenie. Jeśli chcesz uzyskać dostęp do oryginalnego wydarzenia, musisz użyć: event.originalEvent.

W originalEvent znajdziesz dataTransfer.

+2

To znacznie lepsza odpowiedź niż ta, która została zaakceptowana – fuzzyvagina

0

wydarzenia Backbone rzeczywiście wiążą wydarzenia do biblioteki Domu (jQuery, Zepto ...), więc należy załadować jQueryUI jeśli chcesz można przeciągać wydarzeń

+0

Chociaż prawdą jest, że wiąże zdarzenia za pomocą tych manipulatorów DOM, po prostu dodanie jqUI nie rozwiązuje problemu, przynajmniej nie w moich testach. –

+0

Ponieważ dataTransfer jest natywny, możesz uzyskać do niego dostęp za pośrednictwem wywołania zwrotnego: 'dragEnter: function (e) {dt = e.originalEvent.dataTransfer}' więc to właśnie miałem na myśli, wiążąc zdarzenia z jQuery – drinchev

+0

Ah. Nawet nie zdawałem sobie sprawy, że "originalEvent" istnieje. –

Powiązane problemy