执行在 Dojos dijit/Dialog 中动态加载的 JavaScript 代码



我有一个网格。在每一行中都有一个图标,用于打开一个 dijit/对话框

第一.jsp中的链接方法:

var createDownloadLink = function(updateDescriptorId) {
        var link = put('a[href=#]', _textIcon.getIconNode("download", "action.std.download"));
            on(link, 'click', function() {
                xhr('javaMethod/' + updateDescriptorId, {
                    handleAs : "html"
                }).then(function(data) {
                    dialog = new Dialog({
                        content : data
                    });
                    dialog.show();
                });
            });
            return link;
        };

"javaMethod"是控制器中的方法,它返回一个模型视图(Spring)。

应该绘制的页面被绘制,

但只有html部分,问题是在这个页面中有一些javascript(dojo)脚本,但它没有被绘制。

绘制的jsp(但没有javascript部分)

<script type="text/javascript">
    require([ "js/MyJs",
            "dojo/_base/declare",
            "dojo/ready" ],
    function(MyJs, declare, ready) {
        ready(function() {
            var _view = new MyJs({
                'downloadButton' : 'downloadButton',
                'backButton' : 'backButton'
            });
        });
    });
</script>
<div id="" class="floatbox">
    <div class="h1">
        <spring:message code="text.error.headline" />
    </div>
    <div class="description">
        <spring:message code="text.error.description" />
    </div>
    <div class="row">
        <div class="col">
            <div id="downloadButton"></div>
        </div>
        <div class="col">
            <div id="backButton"></div>
        </div>
    </div>
</div>

"downloadButton"和"backButton"没有被绘制,因为它们是在js/MyJs中定义的

这是正确的行为,因为"出于安全考虑,当使用 AJAX 请求(如 dojo/request/xhr)时,JavaScript 永远不会自动执行。

我在某些线程中读到,它必须使用dojox.layout.ContentPane。我试过了,但没有成功。

问题

我应该在哪里放置dojox.layout.ContentPane或我必须在代码中修改的内容,以获得与javascript功能一起显示的模态窗口(dijit/Dialog)?

> 似乎dojox/widget/DialogSimple对您有用,因为它具有executeScripts可选标志。

编辑

不使用dojo/request/xhr,而是使用 dojox/widget/DialogSimplehref 属性:

var createDownloadLink = function(updateDescriptorId) {
    var link = put('a[href=#]', _textIcon.getIconNode("download", "action.std.download"));
    on(link, 'click', function() {
        dlg = new DialogSimple({
            title: "My Title",
            executeScripts: true,
            href: 'javaMethod/' + updateDescriptorId,
        });
        dlg.startup();
        dlg.show();
    });
    return link;
};

我认为您可以放置整个对话框代码,即

<div dojoType="dojox.layout.ContentPane">
<div id="" class="floatbox">
    <div class="h1">
        <spring:message code="text.error.headline" />
    </div>
    <div class="description">
        <spring:message code="text.error.description" />
    </div>
    <div class="row">
        <div class="col">
            <div id="downloadButton"></div>
        </div>
        <div class="col">
            <div id="backButton"></div>
        </div>
    </div>
</div>
</div>

最新更新