2011-11-24 53 views
0

我希望通过编程的4个孩子添加到dijit.layout.AccordionContainer工作。脚本没有错误地运行,但它只增加了2个孩子,不管我如何实现这个目标。从我的调试使用萤火虫看起来像加入第二个孩子后,脚本停止。我想提出以下建议从hereherehere,但我没有发现任何解决方案。道场AccordionContainer.addChild不超过2名儿童

一些代码: 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]); 
     }*/ 
    } 
}); 
} 

控制台输出(从萤火虫):

[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 

任何帮助非常感谢!

编辑 一个小更新: 由url返回我的ItemFileReadStore对象的值是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]具有以下结构(从萤火虫拍摄):

_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阵列。等等,递归 - 这可能是问题吗?

+0

挺奇怪的。什么是第三丹麦对象的属性? – Frode

+0

我编辑了我的问题,增加了更多的数据。 – maialithar

+0

你用什么版本的dojo?我无法在jsfiddle中重现它:http://jsfiddle.net/Quag2/ – Frode

回答

0

我终于成功地解决我的问题。万一别人遇到类似的问题,解决的办法是创建(在这种情况下AccordionContainer)容器声明,而不是编程方式: <div id="id" style="height:50%" dojoType="dijit.layout.AccordionContainer"></div>