ページに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);
}
}
アコーディオンの最初のアイテムのみが表示されるため、これは失敗します。他のものは実際に存在すると思いますが、見えないので何もできません。
私はそれを回避することができました:
- アコーディオンに常に1つのアイテムがあることを確認します(したがって、最初の子を削除することはありません)
- 内容を変更した後、accordian.layout()を呼び出します
したがって、このコードは、常に最初のアイテムを表示したい限り「機能」し、実際には最初のアイテム以外は展開しません。
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();
}
私はDojo1.2.0を使用しています-誰かが私が間違っていることを知っていますか?