上传列表发生更改时的事件

时间:2014-01-03 22:06:45

标签: angularjs fine-uploader

我正在将Fine Uploader集成到现有的工作流程中。用户需要提供一些元数据并选择一个文件,然后单击上传。

在选择文件之前,应禁用“上传”按钮。如果用户删除该文件,它应该返回到禁用状态。我有autoUpload:false

我正在使用AngularJS,因此我绑定了一个调用$("#fine-uploader").fineUploaderS3('getUploads')的函数,这似乎是处理它的好方法。

但是,我需要一种在列表更改后获得通知的方法,因此我可以触发摘要周期并更新UI。我已经尝试为submittedcancel事件注册回调,但是当上传仍在列表中时会调用cancel。

当用户在上传列表中添加或删除文件时,是否有更简洁的方法来获取回调?

2 个答案:

答案 0 :(得分:1)

在您的情况下,收听“取消”事件是不合适的。为什么?因为您可以通过回调处理程序的返回值中止取消尝试,因此在调用取消回调时实际上没有取消文件/上传。

您可以通过收听statusChange event确保该文件已在内部取消。当它被真正取消后,将使用文件ID和newStatus参数statusChange调用qq.status.CANCELED事件处理程序。

您可以在status change handling in the docs上阅读更多内容。

更新:由于您使用的是Fine Uploader UI,因此在更新此状态之前,不会从UI中删除该文件。这对您来说似乎不是问题,因为您正在使用getUploads方法来确定文件状态。

答案 1 :(得分: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