对于某些快速背景知识,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/