this.domNode 为空
Posted
技术标签:
【中文标题】this.domNode 为空【英文标题】:this.domNode is null 【发布时间】:2012-01-24 16:09:06 【问题描述】:我正在尝试使用 jquery 加载道场图表。我正在使用此代码。但是,在第二次单击中,在第一个按钮中我收到此错误。如果我单击第一个按钮,单击第二个按钮并再次单击第一个按钮,也会发生同样的情况。这个问题让我发疯。
demo here
<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>
【问题讨论】:
尝试使用调试时使用的js文件,而不是最小化的。这是为了更容易调试。, 只是想知道你为什么使用两个 javascript 框架? 好吧,这与问题无关。我只是使用 dojo 来创建图表。 @Farmor 文件包含在 require 中。如果我尝试像 【参考方案1】:您似乎正试图在插入/解析新图表之前删除旧图表,但我认为这不会发生。这可能会导致 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
函数将返回回调返回 true 的小部件数组。此外,dojo.indexOf
用于搜索数组中的元素(我不确定你在用它做什么黑魔法:P)。
我认为(如果我理解你的意图),你应该这样做:
dijit.registry.findWidgets(dojo.byId("paginas")).forEach(function(w)
w.destroy();
);
这将在插入和解析新获取的 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>
在主文件的标题中,而不是在您使用 jquery (index1.php) 加载的 HTML 中。
【讨论】:
感谢您的回答。该链接现已更新为您的建议。但是当我们在第一个按钮之后单击第二个按钮时会出现问题。您需要激活工具提示来重现问题。一些 div 没有被删除。 @Daniel 嗯,我没有在更新的页面上看到错误。你是对的,工具提示 div 没有被删除,但我不确定它们是否有问题,因为它们没有明确的 id(并且工具提示有点像单例)。 现在没有错误了。唯一的问题是未删除的工具提示内容。如果我被身体或其他东西破坏,我将得到初始错误 this.domNode is null @Daniel 啊,我现在明白了。我用建议更新了答案。 @Daniel 你太客气了!编码愉快,周末愉快。以上是关于this.domNode 为空的主要内容,如果未能解决你的问题,请参考以下文章