3

プログラムで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の例があります。

私が理解している限り、dojox / form/Uploaderとdojox/form / uploader / plugins / IFrameのソースコードでは、プラグインはdojox.form.addUploaderPlugin関数を介して登録されます。この関数は、selfプラグインとプラグインプラグインを使用してUploaderウィジェットクラスを再宣言します。前任者。ただし、Uploaderウィジェットのキーメソッド「upload」がHTML5プラグイン(Iframeプラグインに自動的に含まれている)によってオーバーライドされることはありません。

このバグですか?または私は何か間違ったことをしていますか?

助けてくれてありがとう!

4

1 に答える 1

4

要するに; プルイン変数の代わりに新しいdojox.form.Uploaderを使用してください。そうしないと、プラグイン拡張は適用されません。

理由は、プログラマーが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

于 2012-04-29T01:16:42.780 に答える