我找不到任何关于以编程方式创建 dojox/form/Uploader 的文档。我自己尝试过,但看起来插件注册机制不知何故被破坏了。
require([
"dojo/dom-construct",
"dijit/form/Button",
"dojox/form/Uploader",
"dojox/form/uploader/FileList",
"dojox/form/uploader/plugins/IFrame",
"dojo/domReady!"
], function(domConstruct, Button, Uploader, UploaderFileList) {
var form = domConstruct.create('form', {
method: 'post',
enctype: 'multipart/form-data',
class: 'Uploader'
}, document.body);
var up = new Uploader({
label: 'Pick files',
multiple: true,
url: '/echo/json/'
}).placeAt(form);
var list = new UploaderFileList({
uploader: up
}).placeAt(form);
var btn = new Button({
type: 'submit',
label: 'upload',
onClick: function() {
up.upload();
}
}).placeAt(form);
btn.startup();
up.startup();
list.startup();
});
jsfiddle here 示例。
据我了解,dojox/form/Uploader 和 dojox/form/uploader/plugins/IFrame 的源代码,该插件是通过 dojox.form.addUploaderPlugin 函数注册的,该函数使用 self 和已插入插件作为其重新声明 Uploader 小部件类前辈。
但是 Uploader 小部件的关键方法“上传”永远不会被 HTML5 插件覆盖(它自动包含在 Iframe 插件中)。
这是bug吗?还是我做错了什么?
谢谢你的帮助!
最佳答案
简而言之;使用新的 dojox.form.Uploader 而不是 pull in 变量,否则插件扩展不适用。
原因是,您会看到程序员在 addUploaderPlugin 中执行以下操作:
dojox.form.UploaderOrg = dojox.form.Uploader;
var extensions = [dojox.form.UploaderOrg];
dojox.form.addUploaderPlugin = function(plug){
extensions.push(plug);
declare("dojox.form.Uploader", extensions, {});
}
AMD 加载器返回的类始终是 dojox.form.UploaderOrg 并且不知道扩展插件。
改为以下:
var up = new dojox.form.Uploader({
label: 'Pick files',
multiple: true,
url: '/echo/json/'
}).placeAt(form);
并确保你有 而不是 设置
djConfig.publishRequireResult = false
关于javascript - 程序化 Dojox 上传器 - ajax 上传不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10343652/