0

我的页面上有一个表格。我想发布它并将响应放在对话窗口中。响应是一个带有要执行的 javascript 的 http 页面。

我想要像 dojox.widget.DialogSimple 这样的东西,它只适用于表单帖子,而不是常规的 http“get”url。

如何将 dojox.layout.ContentPane 与表单帖子一起使用?

4

2 回答 2

0

您可以尝试使用 xhr.post() 发布您的表单并使用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
        }
    };
}));

在这种情况下,内容窗格也可以是一个简单的 dijit.layout.ContentPane 实例,因为不需要执行嵌入的 javascript。

于 2012-10-19T07:53:03.610 回答
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 支持 post 和 get。“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 回答