在JSTL页面上,我有以下divs
<div dojoType="dijit.layout.TabContainer" style="width: 100%; height: 100%;" doLayout="false" id="dojoTabbedPane" >
<c:forEach items="${summariesMap}" var="summaryEntry">
<div dojoType="dijit.layout.ContentPane" title="${summaryEntry.key}">
我尝试在(包括dojoTabbedPane)下找到所有div,以便间歇性地销毁它下面的所有contentPane。然后我可以使用jQuery.load()重新加载内容并使用
dojo.parser.parse(dijit.byId("dojoTabbedPane"));
重新解析组件以确保可以呈现tabbedPane(否则它不会导致内存泄漏或错误)
这里的问题是: (1)我是否在正确的轨道上重新解析dojo TabbedContainer? (2)为什么每次findWidgets函数只返回大小为0的数组?
提前致谢。
答案 0 :(得分:1)
我首先回答2:因为dijit.findWidgets需要一个DOM节点,而不是一个小部件。如果您需要在另一个小部件中找到所有小部件,则可以改为使用getDescendants:
var descWidgets = dijit.byId("dojoTabbedPane").getDescendants();
问题1:首先关闭:如果要销毁TabContainer中的所有选项卡,可以使用:
dijit.byId("dojoTabbedPane").destroyDescendants();
现在,如果我理解正确,您随后从服务器(使用jQuery)获取一串HTML,并希望将其添加到TabContainer。这个新内容包含几个ContentPane div,您希望它们成为TabContainer中的新选项卡。
我可能在这里错了,但如果没有一些粗糙的黑客,我认为这是不可行的。一旦解析/实例化了TabContainer,就应该使用addChild添加标签,传递实例化的ContentPanes。
这意味着如果您从服务器(通过jQuery加载)获得这样的新HTML内容:
<div dojoType="dijit.layout.ContentPane" title="new tab1">foo</div>
<div dojoType="dijit.layout.ContentPane" title="new tab2">bar</div>
..那么你最好的办法是删除旧的TabContainer并创建一个新的,然后解析整个事情。如果您能够更改从服务器获得的内容,也许您只需将其包含在<div dojoType="dijit.layout.TabContainer...
中。