Javascript jquery重新加载后未解析dojo组件

Javascript jquery重新加载后未解析dojo组件,javascript,jquery,dom,dojo,Javascript,Jquery,Dom,Dojo,各位。我正在处理的当前项目需要一个DOJO选项卡式窗格来保存来自DB的数据,并且需要刷新部分页面(id为“refreshable”的div,其中包含选项卡式窗格div),以保持选项卡式窗格中的数据是最新的 这里的问题是当我用Firebug调用以下方法时 j('#refreshable').load(url+' #refreshable > *', function (response) { console.log("hello"); dojo.parser.parse(Do

各位。我正在处理的当前项目需要一个DOJO选项卡式窗格来保存来自DB的数据,并且需要刷新部分页面(id为“refreshable”的div,其中包含选项卡式窗格div),以保持选项卡式窗格中的数据是最新的

这里的问题是当我用Firebug调用以下方法时

j('#refreshable').load(url+' #refreshable > *', function (response) {
    console.log("hello");
    dojo.parser.parse(Dojo.byId('tabbedPane'));
    console.log("hello again !");
});
在firebug控制台中,似乎只显示“hello”,但没有显示“hello reach!”而没有任何错误消息。在jquery重载函数中,对Dojo解析器的调用似乎被中断了

结果是每次刷新“refreshable”时,选项卡窗格中的所有表都显示在堆栈上——Dojo解析器失败


我如何解决这个问题?提前谢谢

这里有两件事是错误的: 1) 大写“Dojo”。dojo总是小写,句号。 2) 你“拿错了”。您需要掌握小部件实例及其生命周期的概念

似乎您使用的是旧的AMD之前(1.7?左右)版本的dojo,因为否则dojo将不会作为全局变量导出

如果它是一个较新的版本,你必须查看文档中的较新版本

那么您的dojo代码段做了什么:

byId('foo')返回对给定domNode的引用,但它是ID属性。 parser.parse(node)解析一个节点,在其上查找数据dojo类型或dojo类型属性,并在其上实例化相应的小部件

如果你多次解析,你会得到各种各样的错误,因为你正在做一些你不应该做的事情:

正在尝试重新分析已实例化的小部件

无法重新解析已实例化的dojo小部件。 即使您清除了dom并重置了它,您还是在小部件注册表中泄漏了一个实例

你必须先摧毁它

为此,在伪代码中:

require(['dijit/_base/registry'], function(registry){
 registry.byNode(document.getElementById('tabbedPane'))[0].destroy();
})
此代码段是异步的,因为它使用require。
如果使用非amd dojo,只需执行
dijit.byNode(document.getElementById('tabbedPane'))[0].destroy()

您的错误控制台说什么?如果JS失败了,你应该会得到一些JS错误。感谢prodigitalson的快速反馈。实际上没有错误消息,这很奇怪,我能看到的只有“Hello”和控制台选项卡中“response”中的所有html代码。脚本选项卡和网络选项卡也没有错误…奇怪…wierd。。。执行
console.log([dojo,dojo])
在您
'hello'
之后,记录并查看这些数组项是否返回
未定义的
;谢谢你,神童。控制台日志上没有显示任何信息。即使我将“console.log([dojo,dojo]);”放在hello伪消息之前,控制台上也没有显示“hello”消息。很抱歉,我刚才提到的是您的代码片段:dojo.parser.parse(dojo.byId('tabbedPane');