2014-01-03 6 views
0

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

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

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

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

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

+0

вы используете Fine Uploader UI, или Fine Uploader Basic/Ядро с собственным полным UI? Я предполагаю, что последний (никаких элементов пользовательского интерфейса, предоставленных Fine Uploader), но хочу подтвердить. –

+0

Привет! Думаю, я использую интерфейс Fine Uploader. 's3.jquery.fineuploader-4.1.1.js',' $ ("# fine-uploader"). fineUploaderS3() '. – paulmelnikow

ответ

1

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

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

Вы можете узнать больше о status change handling in the docs.

UPDATE: Поскольку вы используете интерфейс Fine Uploader, файл не удаляется из пользовательского интерфейса до момента его обновления. Это не похоже на проблему, поскольку вы используете метод getUploads для определения статуса файла.

+0

Спасибо! Это хорошо работает. – paulmelnikow

+0

Спасибо за исправление ошибки орфографии (ОТМЕНА ОТМЕНА). Похоже, что документы имеют одинаковую опечатку. –

+0

Да! С жестким JavaScript, я даже не заметил, что он не работает. Может быть, вы можете установить их на 'qq.status'? – paulmelnikow

0

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

$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)

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