1

我需要允许用户选择要上传的文件,然后需要从用户那里捕获适用于该特定文件的其他所需信息,这些信息将在上传时作为参数发送到服务器。

到目前为止,我一直在通过处理精细上传器 onSubmit 回调并显示带有我需要的输入的模式来做到这一点。如果输入通过验证,我会存储文件 id 和相关参数,否则,如果它们关闭/取消模式,我会调用 Fine-uploader 取消 api 并取消具有给定 id 的文件。

用户可以多次执行此操作,将文件排入标准精细上传器列表,然后他们将按“上传”以实际同时开始上传。

所有这一切都很好,我的问题是因为我启用了“多个”选项,用户可以同时选择或拖动多个文件,但我需要单独向每个文件呈现模态。onSubmit 事件是为每个文件单独触发的,那么在我取消或保存前一个文件之前,如何防止第二个、第三个等模式打开?

作为记录,我实际上是在使用 Backbone/Marionette 并为每个 onSubmit 回调触发一个“文件:添加”事件。这是我创建模态视图并显示它的地方,但是,该解决方案不需要绑定到主干。

此外,如果有更好的方法来使用 Fine-uploader 为文件收集参数,我不一定会使用这种方法 - 只需要确保每个文件都填充了额外的数据,否则无法上传。

这是 Fine Uploader onSubmit 回调:

.on('submit', function(event, id, name) {
   var args = {};
   args.id = id;
   args.fileName = name;
   uploadDocsVent.trigger('file:added', args);  
})

这是我的代码,它正在侦听该事件,创建文件主干模型,并实例化要在模态区域中显示的视图。

uploadDocsVent.on("file:added", function(args){
    var file = new UploadDocuments.File( args );    
    var addlInfoView = new UploadDocuments.Views.FileInfo({ 
        model: file, 
        categories: App.uploadedFilesCategories 
    });
    App.appLayout.modalConfirmRegion.show(addlInfoView);
});

在我看来,我有此代码响应模态点击:

onDialogPrimaryClicked: function () {
    UploadDocuments.claimsUploadWidget.addFileWithInfo( this.model );
    this.trigger("dialog:close");
},

onDialogSecondaryClicked: function () {
    UploadDocuments.uploadView.uploader.fineUploader('cancel', this.model.get('id'));
    this.trigger("dialog:close");
}

在此先感谢您提供有关如何解决/解决此问题的任何想法。

4

1 回答 1

0

安德鲁 - 我想我知道你在说什么。很明显,您只是希望 Fine Uploader 仅在用户以您在 onSubmit 处理程序中为该文件显示的模式提交信息后处理一批选定文件中的文件。您正在寻找的是一种在 onSubmit 处理程序中返回承诺或“延迟”的方法。一旦您的用户提交了相关的模式,这将允许您回叫 Fine Uploader(并说“继续,上传/提交此文件并继续下一个”)。

我已经创建了一个qq.Promise实现承诺模式的“类” 。Fine Uploader 将 Promise 视为onPasteReceived此时仅用于回调的有效返回值。允许它作为其他回调的有效返回值可能是有意义的,例如onSubmit. 这将允许您推迟文件的上传/提交,直到用户处理了相关的模式。multiple由于 Fine Uploader 在“单文件模式”下的工作方式,现在 将选项设置为“false”可能是也可能不是您想要的选项。

我认为允许在某些回调(例如这个回调)中返回承诺以允许用户交互可能很有价值。你能在 Github 项目中打开一个功能请求吗?在那里,我们可以进行更多讨论,您可以跟踪我放入库中的任何相关更改的进度。

于 2013-04-23T19:51:30.517 回答