简体   繁体   English

程序化Dojox上传器 - ajax上传无法正常工作

[英]Programmatic Dojox Uploader - ajax upload not working

I can't find any docs about creating dojox/form/Uploader programmatically. 我找不到任何关于以编程方式创建dojox / form / Uploader的文档。 I tried it by myself, but it looks like that plugin registering mechanism is somehow broken. 我自己尝试过,但看起来插件注册机制在某种程度上被打破了。

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();

});​

Example on jsfiddle here . 上的jsfiddle例子在这里

As far as I understand, source code of dojox/form/Uploader and dojox/form/uploader/plugins/IFrame, the plugin is registered via dojox.form.addUploaderPlugin function, which redeclares the Uploader widget class using self and plugged plugins as its predecessors. 据我所知,dojox / form / Uploader和dojox / form / uploader / plugins / IFrame的源代码,插件是通过dojox.form.addUploaderPlugin函数注册的,该函数使用self和plugged插件重新声明Uploader widget类。前辈。 But the key method "upload" of Uploader widget never gets overridden by HTML5 plugin (which is included automatically with Iframe plugin). 但是上传器小部件的关键方法“上传”永远不会被HTML5插件覆盖(随iframe插件自动包含)。

Is this bug? 这个错误吗? Or I am doing something wrong? 或者我做错了什么?

Thanks for any help! 谢谢你的帮助!

In short; 简而言之; use new dojox.form.Uploader instead of the pulled in variable, otherwise the plugin extending does not apply. 使用新的dojox.form.Uploader而不是pull in变量,否则插件扩展不适用。

Reason being, you would see programmer doing following in the addUploaderPlugin: 原因是,您会看到程序员在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, {});
    }

The class that AMD loader returns is and will allways be dojox.form.UploaderOrg and does not know about the extended plugins. AMD加载器返回的类是,并且总是dojox.form.UploaderOrg并且不知道扩展插件。

Change to following: 更改为以下内容:

var up = new dojox.form.Uploader({
    label: 'Pick files',
    multiple: true,
    url: '/echo/json/'
}).placeAt(form);

And make sure you have not set djConfig.publishRequireResult = false 并确保您没有设置djConfig.publishRequireResult = false

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM