this.domNode为null

我正在尝试使用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>

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

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

我不确定你在这里做什么。 filter函数将返回一个widget的数组,其回调函数返回true。 另外, dojo.indexOf用于搜索数组中的元素(我不确定你在那里用什么样的黑魔法:P)。

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

dijit.registry.findWidgets(dojo.byId("paginas")).forEach(function(w) {
    w.destroy();
});

这会在插入并解析新抓取的HTML之前破坏#paginas内的小部件。

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

<style type="text/css">
@import "http://ajax.googleapis.com/ajax/libs/dojo/1.7/dijit/themes/claro/claro.css";   
</style>

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

链接地址: http://www.djcxy.com/p/10367.html

上一篇: this.domNode is null

下一篇: MVC3 Not Posting entire Model