this.domNode为null

Dan*_*iel 7 javascript jquery dojo widget

我正在尝试使用jquery来加载dojo图表.我正在使用此代码.但是在第二次单击时,在第一个按钮中我收到此错误.如果我单击第一个按钮,单击第二个按钮并再次单击第一个按钮,也会出现相同的情况.这个问题让我抓狂.

在这里演示

在此输入图像描述

<script type="text/javascript">
$(document).ready(function () {
    $('.lista_').click(function () {
        $.get('index1.php', function (data) {
            dojo.addOnLoad(function () {
                require(["dojo/_base/xhr", "dojo/parser", "dojo/dom"], function (xhr, parser, dom) {
                    var um = [];
                    dijit.registry.filter(function (w) { //problem here, maybe this code destroy something that should not be destroyed
                        if (dojo.indexOf(um)) {
                            w.destroyRecursive();
                        }
                    });
                    $('#paginas').html(data);

                    dojo.parser.parse(dojo.byId('paginas'));

                });
            });
        });
    });
});
</script>
Run Code Online (Sandbox Code Playgroud)

Fro*_*ode 3

看起来您正在尝试在插入/解析新图表之前删除旧图表,但我认为这种情况不会发生。这可能会导致 Dojo 抛出各种错误。

dijit.registry.filter(function (w) { //problem here, maybe this code destroy something that should not be destroyed
    if (dojo.indexOf(um)) {
        w.destroyRecursive();
    }
});
Run Code Online (Sandbox Code Playgroud)

我不确定你在这里做什么。该filter函数将返回回调返回 true 的小部件数组。此外,dojo.indexOf用于搜索数组中的元素(我不确定你在那里用它做什么黑魔法:P)。

我认为(如果我理解你的意图),你应该这样做:

dijit.registry.findWidgets(dojo.byId("paginas")).forEach(function(w) {
    w.destroy();
});
Run Code Online (Sandbox Code Playgroud)

这将在插入和解析新获取的 HTML 之前销毁 #paginas 内的小部件。

编辑:当您单击第二个按钮时,图表将被删除,<style>标签也会被删除。这就是为什么您会看到工具提示 div 中的工件,因为它不再被 CSS 隐藏。您可以通过在主文件中导入 claro.css 来解决此问题,即输入:

<style type="text/css">
@import "http://ajax.googleapis.com/ajax/libs/dojo/1.7/dijit/themes/claro/claro.css";   
</style>
Run Code Online (Sandbox Code Playgroud)

在主文件的标头中,而不是在使用 jquery (index1.php) 加载的 HTML 中。

  • @丹尼尔你太善良了!祝编码愉快,周末愉快。 (2认同)