2

我正在使用带有 jquery 插件的精细上传器。需要在上传文件之前动态传递参数,因此 setParams() 方法应该可以完成这项工作。我在 onSubmit 回调中不能有例外:

1) 上传者声明

 function initUploader() {
         var up = $('#BSUploader').fineUploader({
                      multiple: true,
                      debug: true,
                      request: {
                          endpoint: '${request.contextPath}/quantum/uploadToS3',
                          //params: {'folderId':r }
                      },
                      dragAndDrop: {
                          extraDropzones:[$('#filesContainer')],

...

2) onSubmit 回调

...
}).on('submit', function(event, id, name) {
          var r = $("#curfolderid").val();
          alert(r);
          up.setParams({'folderId':r});

3) 错误日志

[FineUploader] Caught exception in 'onSubmit' callback - Object [object Object] has no method 'setParams' bundle-bundle_uploader_defer.js:4
qq.log bundle-bundle_uploader_defer.js:4
qq.FineUploaderBasic.log bundle-bundle_uploader_defer.js:26
b bundle-bundle_uploader_defer.js:47
a._options.callbacks.(anonymous function) bundle-bundle_uploader_defer.js:47
qq.FineUploaderBasic._upload bundle-bundle_uploader_defer.js:43
qq.FineUploaderBasic._uploadFileOrBlobDataList bundle-bundle_uploader_defer.js:43
qq.FineUploaderBasic.addFiles bundle-bundle_uploader_defer.js:29
qq.DragAndDrop.callbacks.dropProcessing bundle-bundle_uploader_defer.js:69
b bundle-bundle_uploader_defer.js:51
qq.UploadDropZone.onDrop bundle-bundle_uploader_defer.js:52
(anonymous function)

任何的想法 ?

4

1 回答 1

7

您没有正确使用 jQuery 插件包装器。这个插件的文档清楚地解释了在使用插件时如何调用 API 方法。您应该真正从第一页开始遵循自述文件,然后根据您的预期用途遵循概述的路径。这样做可以防止您遇到通过熟悉库可以解决的问题。

现在,开始解决您的问题...

up您创建的变量被分配了一个对象,该jQuery对象表示 ID 为“BSUploader”的元素。您正在尝试调用此 jQuery 对象上不存在的函数。Fine Uploader 不会使用其他方法污染 jQuery 对象。在开发插件包装器时,遵循了 jQuery 网站上列出的所有接受/推荐的标准。这意味着您必须在插件实例的上下文中调用 API 方法。

所以,你必须改变这一行:
up.setParams({'folderId':r});

对此:
up.fineUploader('setParams', {'folderId':r});

另一种选择是完全消除up变量。你真的不需要它,因为你可以setParams像这样调用你的回调处理程序:
$(this).fineUploader('setParams', {'folderId':r});

于 2013-04-06T13:41:47.203 回答