我的页面上有一个dijit.layout.AccordionContainer,它在html中定义,并在dojo解析加载页面时创建。
然后,当用户与页面交互时,我使用Ajax检索数据并以编程方式填充容器(首先删除现有项目)。
为了简单说明我的问题,这里有一些不起作用的代码:
function doit() {
var accordion = dijit.byId("accordionShell");
accordion.getChildren().each(function(item) {
accordion.removeChild(item);
});
for (i = 1; i < 5; i++) {
var d = new dijit.layout.AccordionPane({title:'hello', content:'world'});
accordion.addChild(d);
}
}
这失败了,因为只有手风琴中的第一个项目可见。我认为其他人确实存在,但他们不可见,所以你什么也做不了。
我设法绕过它:
所以,只要你总是希望看到第一个项目,并且除了第一个项目之外没有实际扩展,这个代码“有效”:
function doit() {
var accordion = dijit.byId("accordionShell");
var i = 0;
accordion.getChildren().each(function(item) {
if (i > 0) accordion.removeChild(item);
i++;
});
for (i = 1; i < 5; i++) {
var d = new dijit.layout.AccordionPane({title:'hello', content:'world'});
accordion.addChild(d);
}
accordion.layout();
}
我正在使用Dojo 1.2.0 - 任何人都知道我做错了什么?
答案 0 :(得分:0)
我相信我发现了一个问题 - accordian.removeChild()是不够的。如果你销毁它,那么行为似乎是正确的。我不知道你是否必须做两件事,或者如果自己毁灭就足够了。
因此,删除现有项目的代码变为:
accordion.getChildren().each(function(item) {
if(i>0) {
accordion.removeChild(item);
item.destroy();
}
i++;
});
我通过在第一项中提供“帮助信息”来解决这个限制......
答案 1 :(得分:0)
如果我没有误会......你应该......
pane1half = new dijit.layout.ContentPane({id: "pane1half", title: "hello", content: "world"});
87 accordion.addChild(pane1half,1);
答案 2 :(得分:0)
我每次都会创建一个新的AccordionContainer,添加AccordionPane孩子,然后执行:
oldAccordion.domNode.parentNode.replaceChild(
newAccordion.domNode,
oldAccordion.domNode
);
oldAccordion.destroyRecursive();
newAccordion.startup();