Предотвращение дефолта с помощью событий перетаскивания в Meteor

Я пытаюсь реализовать базовые функции перетаскивания в приложение Meteor. Я хочу, чтобы пользователь мог удалить файл (из своей файловой системы) в указанный элемент dom и получить этот файл в объекте dataTransfer. К сожалению, я не могу помешать событию перезагрузить всю страницу в событии drop. Здесь мой основной обработчик событий:

Template.sideBar.events({

 'drop #features' : function(e, t) {

   e.preventDefault();

   var fileList = e.dataTransfer.files;
   console.log(fileList[0]); 

   return false; 
 }

});

Я тестировал это с помощью Chrome и Firefox. Я что-то упускаю? Кто-нибудь реализовал это успешно?

Ответ 1

Ну, это было глупо. Кажется, я понял это. Вы должны вызвать preventDefault() в событии dragover в дополнение к событию drop. Здесь мой рабочий код:

Template.sideBar.events({

  'dragover #features' : function(e, t) {
    e.preventDefault(); 
    $(e.currentTarget).addClass('dragover');
  },

  'dragleave #features' : function(e, t) {
    $(e.currentTarget).removeClass('dragover');
  },

  'drop #features' : function(e, t) {
    e.preventDefault();
    console.log('drop!');
  }

});

Не знаю, почему это работает, но это происходит (по крайней мере, в Chrome).

Ответ 2

Обновляя [email protected], вам также необходимо вызвать метод dataTransfer.getData() для извлечения данных с удаленных файлов (если вы используете drag n 'drop для загрузки файлов)

'drop #features' : function(e, t) {
    e.preventDefault();
    console.log('drop!');

    e.originalEvent.dataTransfer.getData("text");
    //without the previous line you won't be able to get dropped file data;
    console.log('File name: ' + e.originalEvent.dataTransfer.files[0].name);
}