Событие, когда список загрузок изменился

Я интегрирую Fine Uploader в существующий рабочий процесс. Пользователь должен предоставить немного метаданных и выбрать файл, а затем нажать «Загрузить».

Кнопка «Загрузить» должна быть отключена до тех пор, пока не будет выбран файл. Если пользователь удалит файл, он должен снова стать отключенным. У меня autoUpload:false.

Я использую AngularJS, поэтому я привязываюсь к функции, которая вызывает $("#fine-uploader").fineUploaderS3('getUploads'), и мне кажется, что это хороший способ справиться с этим.

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

Есть ли более чистый способ получить обратный вызов, когда пользователь добавляет или удаляет файл из списка загрузок?


person paulmelnikow    schedule 03.01.2014    source источник
comment
Используете ли вы пользовательский интерфейс Fine Uploader или Fine Uploader Basic/Core со своим собственным полным пользовательским интерфейсом? Я предполагаю последнее (элементы пользовательского интерфейса не предоставляются Fine Uploader), но хочу подтвердить.   -  person Ray Nicholus    schedule 04.01.2014
comment
Привет! Думаю, я использую Fine Uploader UI. s3.jquery.fineuploader-4.1.1.js, $("#fine-uploader").fineUploaderS3().   -  person paulmelnikow    schedule 04.01.2014


Ответы (2)


В вашем случае прослушивание события "отмена" не подходит. Почему? Поскольку файл/загрузка фактически не отменяется при вызове обратного вызова отмены из-за того, что вы можете прервать попытку отмены с помощью возвращаемого значения обработчика обратного вызова.

Вы можете быть уверены, что файл был внутренне удален, прослушивая событие statusChange. . Когда он действительно будет отменен, ваш обработчик события statusChange будет вызван с идентификатором файла и параметром newStatus, равным qq.status.CANCELED.

Подробнее об обработке изменений статуса можно прочитать в документации.

ОБНОВЛЕНИЕ. Поскольку вы используете пользовательский интерфейс Fine Uploader, файл не удаляется из пользовательского интерфейса до тех пор, пока этот статус не будет обновлен. Однако для вас это не проблема, поскольку вы используете метод getUploads для определения состояния файла.

person Ray Nicholus    schedule 03.01.2014
comment
Спасибо, что исправили орфографическую ошибку (ОТМЕНЕНО или ОТМЕНЕНО). Похоже, в документах та же опечатка. - person Ray Nicholus; 04.01.2014
comment
Ага! С жестким JavaScript я даже не заметил, что он не работает. Может быть, вы можете установить их обоих на qq.status? - person paulmelnikow; 04.01.2014
comment
Я полагаю, что мог бы это сделать, но правильное значение статуса всегда было qq.status.CANCELED. Сейчас я выкладываю обновление, которое обеспечивает согласованное написание этого слова в коде и документах. - person Ray Nicholus; 04.01.2014
comment
Хорошо. Кстати, спасибо за сверхбыстрый ответ! - person paulmelnikow; 04.01.2014

Вот мое рабочее решение, если оно кому-то пригодится:

$scope.uploader = $('#fine-uploader').fineUploaderS3({
    ...
}).on('statusChange', function (event, id, oldStatus, newStatus) {
    $timeout(function () {
        $scope.$digest();
    });
});

$scope.has_selected_file = function () {
    if (!$scope.uploader) return false;
    var uploads = $scope.uploader.fineUploaderS3('getUploads');
    var result = _(uploads).some(function (item) {
        return item.status !== qq.status.CANCELED;
    });
    return result;
};

(Используется Underscore.js)

person paulmelnikow    schedule 03.01.2014