0

私のページにフォームがあります。それを投稿して、応答をダイアログウィンドウに入れたいです。応答は、実行する JavaScript を含む http ページです。

dojox.widget.DialogSimple のように、通常の http "get" URL ではなく、フォーム ポストでのみ機能するものが必要です。

フォーム投稿で dojox.layout.ContentPane を使用するにはどうすればよいですか?

4

2 に答える 2

0

ありがとう、それは悪い方法ではありませんが、javascriptを実行し、もう少しシームレスなものを望んでいました. 多くの実験の後、私はこれを見つけました:

    dialog = new dojox.widget.DialogSimple({
        title: 'My Dialog',
        width: '400px',
        height: '300px',
        ioMethod: dojo.xhrPost,
        ioArgs: {
            form: formDomNode
        }
    });
    dialog.set("href", formDomNode.action);

    dojo.connect(dialog, 'onHide', dojo.hitch(dialog, function() {
        this.destroyRecursive();
    }));

    dialog.show();

DialogSimple は完全に Dialog と dojox の ContentPane が混在しており、ContentPane は get だけでなく post もサポートしています。「href」は、初期パラメーターとしてではなく、後で設定する必要があります。そうしないと、何らかの理由で正しく機能しません。

dojox ContentPane に直接投稿する: (JavaScript が実際のページに配置されたときにのみ実行されることに注意してください)

    var cp = new dojox.layout.ContentPane({
        ioMethod: dojo.xhrPost,
        ioArgs: {
            form: formDomNode
        }
    }, "dialogContent");
    //cp.placeAt("dialogContent");
    cp.set("href", formDomNode.action); 
于 2012-10-19T17:35:14.847 に答える
0

xhr.post() を使用してフォームを投稿し、dojox.layout.ContentPane をyourContentPane.set("content", resultOfPost). コンテンツを手動で設定するときにjavascriptが実行されるのか、それともhrefの設定でのみ機能するのかはわかりません。

いずれにせよ、HTML レスポンスに JavaScript を埋め込むことはお勧めしません。投稿が成功した後、コードを実行できます。この疑似コードは、アイデアを与えることができます:

// Handle the submission of the "Generate service" form
on(document.body, "#yourForm:submit", function(evt) {
    evt.preventDefault();
    xhr.post({
        handleAs: "text",
        form: "yourFormId",
        timeout: 15000,
        load: function(data, ioArgs) {
            var yourContentPane = registry.byId("yourContentPane");
            yourContentPane.set("content", data);
            // Execute your javascript code here, instead
            // of embedding it in the html that is loaded into
            // the content pane...
        },
        error: function(err, ioArgs) {
            // handle error
        }
    };
}));

この場合、埋め込まれた JavaScript を実行する必要がないため、コンテンツ ペインも単純な dijit.layout.ContentPane インスタンスにすることができます。

于 2012-10-19T07:53:03.610 に答える