Dojo AccordionContainer.addChild 不适用于 2 个以上的子级
我想以编程方式向 dijit.layout.AccordionContainer
添加 4 个子级。该脚本运行时没有错误,但无论我如何尝试实现这一点,它都只添加了 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]
我注意到 <上面显示的 code>_S 包含整个 dane 数组。此 dane
包含另一个 _S
以及整个 dane
数组。等等,递归地——这可能是问题所在吗?
I want to add programatically 4 children to dijit.layout.AccordionContainer
. The script runs with no errors, but it only adds 2 children, no matter how I try to achieve this. From my debug using firebug it looks like the scripts stops after adding second child. I tried following suggestions from here, here and here, but I found no solution.
Some code:
AccordionContainer definition:
var listaWyjazdow = new dijit.layout.AccordionContainer({}, "target-lista-wyjazdow");
listaWyjazdow.startup();
aktualizujListeWyjazdow();
function to add 4 children to 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]);
}*/
}
});
}
console output (from 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
Any help would be greatly appreciated!
EDIT
a little update:
in my ItemFileReadStore
object value returned by url
is 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]
has following structure (taken from firebug):
_0 2
_RI true
_S Object { _arrayOfAllItems=[4], _arrayOfTopLevelItems=[4], _loadFinished=true, more...}
data ["30-11-2011"]
[other fields from json structure]
I have noticed that _S
shown above contains whole dane
array. And this dane
contains another _S
with whole dane
array. And so on, recursively - could this be the problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我终于设法解决了我的问题。如果其他人遇到类似的问题,解决方案是以声明方式而不是以编程方式创建容器(在本例中为
AccordionContainer
):I finally managed to solve my problem. In case anyone else encounters similar problem, the solution is to create container (
AccordionContainer
in this case) declaratively, not programmatically:<div id="id" style="height:50%" dojoType="dijit.layout.AccordionContainer"></div>