Как подтвердить удаление нескольких файлов в blueimp jQuery FileUpload?

Мне удалось подтвердить отдельные удаления, но кнопка .delete на панели инструментов пользовательского интерфейса, похоже, просто запускает удаление для всех выбранных элементов.

То, что я действительно хотел бы сделать, это подавить мой запрос на удаление для отдельных элементов в этом контексте и запросить один раз для массива выбранных элементов (в идеале список имен файлов, как для отдельных файлов). Мое индивидуальное переопределение выглядит следующим образом:

$('#fileupload').bind('fileuploaddestroy', function (e, data) {
  var filename = data.url.substring(data.url.indexOf("=") + 1,data.url.indexOf("&"))
  var delconf = confirm("Delete the file \"" + decodeURIComponent(filename) + "\"?");
    if(!delconf) {
        e.preventDefault;
        return false;
    }
});

Я даже не уверен, есть ли конкретное событие, которое нужно переопределить для множественных удалений, или как я могу его найти, поэтому любые советы по этим темам также будут полезны.


person Tim Ogilvy    schedule 19.01.2014    source источник
comment
Похоже, что обработчик связан в fileupload-ui.js в функции _initButtonBarEventHandlers... Я бы предпочел не переопределять всю эту функцию, если бы я мог этого избежать...   -  person Tim Ogilvy    schedule 19.01.2014


Ответы (1)


До сих пор мой ответ состоял в том, чтобы изменить jquery.fileupload-ui.js следующим кодом в функции _initButtonBarEventHandlers:

        this._on(fileUploadButtonBar.find('.delete'), {
            click: function (e) {
                if(this._trigger('multiDestroy')){                      
                    if (e.isDefaultPrevented()) {
                        return false;
                    }
                    e.preventDefault();
                    filesList.find('.toggle:checked')
                        .closest('.template-download')
                        .find('.delete').click();
                    fileUploadButtonBar.find('.toggle')
                        .prop('checked', false);
                    this._trigger('multiDestroyFinished');
                }
            }
        });

Плюс пустые обратные вызовы примерно в строке 381:

// Callback for multiple file deletion:
multiDestroy: function (e) {},
// Finished callback for multiple file deletion:
multiDestroyFinished: function (e) {}

мой встроенный код выглядит так:

var multiDel = false;

$('#fileupload').on('fileuploaddestroy', function (e, data) {
      if(multiDel){ return true; };
      var filename = data.url.substring(data.url.indexOf("=") + 1,data.url.indexOf("&"))
      var delconf = confirm("Delete the file \"" + decodeURIComponent(filename) + "\"?");
      if(!delconf) {
          e.preventDefault;
          return false;
      }
});

$('#fileupload').fileupload({
    multiDestroy: function (e) {
        var delconf = confirm("Are you sure you wish to delete the selected files?");
        if (!delconf) {
            e.preventdefault;
            return false;
        } else { 
            multiDel = true; 
        }
    }
})
.fileupload({
    multiDestroyFinished: function (e) {
      multiDel = false;
    }
});

Я бы не сказал, что полностью доволен этим ответом, отчасти потому, что обертывание функции щелчка в блоке if кажется грязным, а отчасти потому, что я переписываю плагин Себастьяна, а не расширяю его. Я вряд ли приму свой ответ, поэтому, если у кого-то есть лучший, принесите его!

person Tim Ogilvy    schedule 19.01.2014