2013-08-14 3 views
1

У меня есть панель инструментов с двумя основными видами. Один вид содержит множество зон сброса, а другой содержит элементы, которые являются draggable="true". Однако эти зоны сброса не стреляют по drop событиям, но они стреляют по dragenter и dragleave. Почему событие капли не срабатывает?Backbone Drop Событие не работает

Примечание: Шаблон, который визуализируется содержит .item-drop-zone элементы Div

The View, содержащий рабочие зоны:

Shopperater.Views.ModuleMedleyView = Backbone.View.extend({ 

    tagName: "div", 
    className: "row", 
    template: JST['modules/medley'], 

    initialize: function() { 
     _.bindAll(this); 
    }, 

    events: { 
     'dragenter .item-drop-zone' : 'highlightDropZone', 
     'dragleave .item-drop-zone' : 'unhighlightDropZone', 
     'drop .item-drop-zone' : 'dropTest' 
    }, 

    dropTest: function(e) { 
     console.log("dropped!") 
    }, 

    highlightDropZone: function(e) { 
     e.preventDefault(); 
     $(e.currentTarget).addClass('item-drop-zone-highlight') 
    }, 

    unhighlightDropZone: function(e) { 
     $(e.currentTarget).removeClass('item-drop-zone-highlight') 
    }, 

    render: function() { 
     this.$el.html(this.template({ })); 
     return this; 
    } 

}); 
+0

Попробуйте использовать '' drop .item-drop-zone'', потому что событие 'drop' запускается над элементом, где произошла ошибка в конце операции перетаскивания. – nemesv

+0

Да, я начал с этого, и он все еще не срабатывает. Однако я отредактирую этот вопрос, чтобы отразить ваше предложение. – ac360

+0

Помогает ли [этот ответ] (http://stackoverflow.com/a/14349610/877472)? –

ответ

6

Вы должны сообщить браузеру, что элемент является целью снижения :

events: { 
    'dragenter .item-drop-zone' : 'highlightDropZone', 
    'dragleave .item-drop-zone' : 'unhighlightDropZone', 
    'drop .item-drop-zone' : 'dropTest', 
    'dragover .item-drop-zone': function(ev) { 
     ev.preventDefault(); 
    } 
} 

См. https://developer.mozilla.org/en-US/docs/DragDrop/Drag_Operations#droptargets для получения дополнительной информации о падении целей. Вам нужны как dragenter, так и dragover события. Поскольку вы уже делаете dragenter, вы можете просто добавить dragover.

Из ссылки

Вызов метода preventDefault во время как в случае dragenter и dragover укажет, что drop разрешено в этом месте.

+0

Отличный ответ. Спасибо, Калли. – ac360

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