3 votes

Programmatic Dojox Uploader - ajax upload ne fonctionne pas

Je ne trouve aucune documentation sur la création programmatique de dojox/form/Uploader. J'ai essayé par moi-même, mais il semble que le mécanisme d'enregistrement du plugin soit en quelque sorte cassé.

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

});

Exemple sur jsfiddle aquí .

Pour autant que je comprenne le code source de dojox/form/Uploader et dojox/form/uploader/plugins/IFrame, le plugin est enregistré via la fonction dojox.form.addUploaderPlugin, qui redéclare la classe du widget Uploader en utilisant self et les plugins enfichés comme ses prédécesseurs. Mais la méthode clé "upload" du widget Uploader n'est jamais remplacée par le plugin HTML5 (qui est inclus automatiquement avec le plugin Iframe).

S'agit-il d'un bogue ? Ou est-ce que je fais quelque chose de mal ?

Merci de votre aide !

4voto

mschr Points 5003

En bref, utilisez new dojox.form.Uploader au lieu de la variable tirée, sinon l'extension du plugin ne s'applique pas.

La raison en est que vous verriez le programmeur faire ce qui suit dans l'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, {});
    }

La classe que le chargeur AMD renvoie est et sera toujours dojox.form.UploaderOrg et ne connaît pas les plugins étendus.

Remplacer par ce qui suit :

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

Et assurez-vous d'avoir no fixer djConfig.publishRequireResult = false

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X