Dojo AccordionContainer.addChild не работает для более чем 2 дочерних элементов

Я хочу программно добавить 4 детей к dijit.layout.AccordionContainer. Скрипт работает без ошибок, но добавляет только 2 дочерних элемента, как бы я ни пытался этого добиться. Из моей отладки с использованием firebug похоже, что сценарии останавливаются после добавления второго дочернего элемента. Я пробовал следовать предложениям из здесь, здесь и здесь, но я не нашел решения.

Некоторый код: определение AccordionContainer:

var listaWyjazdow = new dijit.layout.AccordionContainer({}, "target-lista-wyjazdow");

listaWyjazdow.startup();

aktualizujListeWyjazdow();

функция для добавления 4 дочерних элементов к AccordionContainer:

function aktualizujListeWyjazdow(){
dojo.require("dijit.layout.AccordionPane");

var lista = dijit.byId('target-lista-wyjazdow');
lista.destroyDescendants();

var tablica = new dojo.data.ItemFileReadStore({
    url: "logika/getJSON/getWyjazdy.php",
    clearOnClose: true,
    urlPreventCache: true
}).fetch({
    query: {id: '*'},
    sort: {attribute: 'data', descending: true},
    start: 0,
    count: 4,
    onComplete: function(dane){
        console.log(dane);
        var ile = dane.length;
        var i = 0;
        var dzieci = new Array();

                    //this works for 2 children only:
        for (i = 0; i < ile; i++){
            var szczegoly = 'Klient: <strong>' + dane[i].klient + '</strong></br>';
            szczegoly += 'Osoba wyjeżdżająca: <strong>' + dane[i].wyjezdzajacy + '</strong></br>';

            dzieci[i] = new dijit.layout.AccordionPane({
                id: "wyjazd" + i,
                title: "Wyjazd: " + dane[i].data,
                content: szczegoly
            });
            console.log(dane[i]);
            console.log(i + ' - ' + ile);
            lista.addChild(dzieci[i], 0);
            lista.selectChild(dijit.byId('wyjazd' + i));
            //console.log(lista);
        }
                    //this works for 2 children only:
        /*lista.addChild(dzieci[0]);
        console.log(0);
        lista.addChild(dzieci[1]);
        console.log(1);
        lista.addChild(dzieci[2]);
        console.log(2);
        lista.addChild(dzieci[3]);
        console.log(3);*/

                    //this outputs all children:
        /*console.log(dzieci[0]);
        console.log(dzieci[1]);
        console.log(dzieci[2]);
        console.log(dzieci[3]);*/

                    //this works for 2 children only:
        /*for (i = 0; i < ile; i++){
            lista.addChild(dzieci[i]);
            console.log(dzieci[i]);
        }*/
    }
});
}

вывод консоли (из firebug):

[Object { id=[1], etykieta=[1], data=[1], more...}, Object { id=[1], etykieta=[1], data=[1], more...}, Object { id=[1], etykieta=[1], data=[1], more...}, Object { id=[1], etykieta=[1], data=[1], more...}]

Object { id=[1], etykieta=[1], data=[1], more...}

0 - 4

Object { id=[1], etykieta=[1], data=[1], more...}

1 - 4

Любая помощь будет принята с благодарностью!

ИЗМЕНИТЬ небольшое обновление: в моем объекте ItemFileReadStore значение, возвращаемое url, равно json:

{
    "identifier": "id",
    "label": "etykieta",
    "items": [
        {
            "id": "1",
            "etykieta": "Wyjazd0",
            "data": "06-10-2011",
            "wyjezdzajacy": "cblajszczak",
            "idKlienta": "1",
            "klient": "klient testowy",
            "zadanieQS": null,
            "dataKolejnegoWyjazdu": null,
            "lacznyCzasWyjazdu": "0"
        },
        {
            "id": "3",
            "etykieta": "Wyjazd1",
            "data": "15-11-2011",
            "wyjezdzajacy": "cblajszczak",
            "idKlienta": "1",
            "klient": "klient testowy",
            "zadanieQS": null,
            "dataKolejnegoWyjazdu": null,
            "lacznyCzasWyjazdu": "0"
        },
        {
            "id": "5",
            "etykieta": "Wyjazd2",
            "data": "30-11-2011",
            "wyjezdzajacy": "cblajszczak",
            "idKlienta": "1",
            "klient": "klient testowy",
            "zadanieQS": null,
            "dataKolejnegoWyjazdu": null,
            "lacznyCzasWyjazdu": "0"
        },
        {
            "id": "4",
            "etykieta": "Wyjazd3",
            "data": "24-11-2011",
            "wyjezdzajacy": "cblajszczak",
            "idKlienta": "2",
            "klient": "hfhhfhd",
            "zadanieQS": null,
            "dataKolejnegoWyjazdu": null,
            "lacznyCzasWyjazdu": "0"
        }
    ]
}

dane[2] имеет следующую структуру (взято из firebug):

_0 2
_RI true
_S Object { _arrayOfAllItems=[4], _arrayOfTopLevelItems=[4], _loadFinished=true, more...}
data ["30-11-2011"]
[other fields from json structure]

Я заметил, что _S, показанный выше, содержит весь массив dane. И этот dane содержит еще один _S с целым массивом dane. И так далее рекурсивно - может в этом проблема?


person maialithar    schedule 24.11.2011    source источник
comment
Довольно странно.. Каковы свойства третьего датского объекта?   -  person Frode    schedule 25.11.2011
comment
Я отредактировал свой вопрос, добавил больше данных.   -  person maialithar    schedule 25.11.2011
comment
Какую версию додзё вы используете? Я не могу воспроизвести это в jsfiddle: jsfiddle.net/Quag2   -  person Frode    schedule 25.11.2011
comment
Использую 1.6, спасибо за код jsfiddle, попробую поработать на этом примере   -  person maialithar    schedule 25.11.2011


Ответы (1)


Наконец-то мне удалось решить мою проблему. Если кто-то еще столкнется с подобной проблемой, решение состоит в том, чтобы создать контейнер (в данном случае AccordionContainer) декларативно, а не программно: <div id="id" style="height:50%" dojoType="dijit.layout.AccordionContainer"></div>

person maialithar    schedule 28.11.2011