对于某些快速背景知识,uploadStoredFiles()是FineUploader插件中使用的一种方法,用于将附件文件数据异步发送到服务器路径。我也在我的应用程序中使用AngularJS。我的问题实际上与这里的问题非常相似...

jQuery: wait for function to complete to continue processing?

...最大的区别是我无法访问回调函数本身。另外,我的脚本以较大形式的附件形式运行FineUploader,附件是可选的,因此使用FineUploader“完成”回调也无济于事。

这是一个代码示例。基本上,如果没有附件,则应重新加载页面。如果有附件,则应上传附件,然后重新加载页面。

if(hasAttachments)
{
    myuploader.uploadStoredFiles();
}

//AngularJS call to refresh page
$route.reload();


大多数情况下,页面会自行刷新,并且文件列表中缺少该文件,直到稍后再进行其他刷新。我可以硬编码一个等待时间,但是那似乎效率低下而且邪恶。

任何建议或解决方案都将受到欢迎。我特别喜欢Angular-ish解决方案,但我会尽力而为。

最佳答案

我试图将我的评论总结成一个有凝聚力的答案:

当某些事情发生时,例如当文件提交到上载器(onSubmit)或文件上载(onComplete)时,Fine Uploader的事件将运行代码。

原始的JavaScript看起来像

$(document).ready(function() {

    $("#triggerUpload").click(function () {
        $("#manual-fine-uploader").fineUploader('uploadStoredFiles');
    });

    function submitForm () {
        if ($(this).fineUploader('getInProgress') == 0) {
            var failedUploads = $(this).fineUploader('getUploads',
                { status: qq.status.UPLOAD_FAILED });
            if (failedUploads.length == 0) {
                // do any other form processing here
                $("#uploader").submit();
            }
        }
    };

    // Instantiate a Fine Uploader instance:
    $("#manual-fine-uploader").fineUploader({
        autoUpload: false,
        request: {
            endpoint: "/uploads_bucket"
        }
    }).on("complete", function (event, id, name, response) {
        submitForm.call(this);
    }).on('statusChange', function (event, id, oldStatus, newStatus) {
        if (newStatus === qq.status.CANCELLED) {
            submitForm.call(this);
        }
    });
});


您可以使用this Angluar example作为创建Fine Uploader指令的起点。

关于javascript - 需要FineUploader方法uploadStoredFiles才能继续进行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20506840/

10-10 03:15