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

时间:2014-11-14 12:51:30

标签: javascript ajax spring dojo

我有一个网格。在每一行中都有一个图标,打开一个dijit / Dialog

First.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”是Controller中的一个方法,它返回一个ModelView(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永远不会被自动执行。”像Dimitri M说here

我在一些帖子中读过,必须使用 dojox.layout.ContentPane 。我尝试过,但没有成功。

问题

我应该把 dojox.layout.ContentPane 或者我在代码中修改的内容放到哪里,以获得用javascript功能显示的模态窗口(dijit / Dialog)?

2 个答案:

答案 0 :(得分:0)

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

修改

不使用dojo/request/xhr,而是使用href的{​​{1}}属性:

dojox/widget/DialogSimple

答案 1 :(得分:0)

我认为你可以把整个对话框代码,即

<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>