Salut,
Je générais jusqu'ici mon store à partir d'un fichier json, lui-même généré par un fichier PHP, mais je trouve cette solution lourde car difficile à maintenir au niveau de l'accumulation des fichiers json et des risques de mise en cache.
J'ai donc décidé de générer le même store à partir d'une chaîne JSON récupére par l'appel à mon script PHP via un dojo.xhrGet.
Seulement, même si la chaîne est valide et tout et tout, j'ai une erreur dans Firebug, et le tree ne s'affiche pas.
L'erreur:
La seule chose qui a changé, c'est le store.[Widget dijit.Tree, arbre] srcNodeRef=div#arbre _connects=[5] : error loading root children: TypeError: this._arrayOfTopLevelItems is undefined message=this._arrayOfTopLevelItems is undefined
Je fais ça :
Tandis qu'avant, je faisais ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 var sourceStore = dojo.xhrGet({ url: "../ajax/makeStore.php?id_site=" + id_site, handleAs: "json", load: function(data){ console.log(data); return data; }, error: function(error){ alert(error); } }); var store = new dojo.data.ItemFileWriteStore({ data: sourceStore });
Pour info, voici d'autres bouts de code qui peuvent aider.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 var store = new dojo.data.ItemFileWriteStore({ url: "1107.json" });
La chaîne JSON récupérée(valide d'après JSONLint.com):
Et enfin, l'arbre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 {"identifier": "id","label": "nom","items":[{"id":"21","nom":"Test","id_site":"1107","id_parent":"0" ,"enfants":[{"id":"22","nom":"Test2","id_site":"1107","id_parent":"21","enfants":[{"id":"24","nom":"Test4" ,"id_site":"1107","id_parent":"22"}]},{"id":"25","nom":"Test5","id_site":"1107","id_parent":"21"}]}, {"id":"23","nom":"Test3","id_site":"1107","id_parent":"0"}]}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 var treeModel = new dijit.tree.ForestStoreModel({ store: store, id: "model", query: {"id" : "*"}, rootId: "root", rootLabel: "Dossiers", childrenAttrs: ["enfants"] }); var tree = new dijit.Tree({ model: treeModel, onClick: function(item){selectedItem = item} }, "arbre");
EDIT
-----
Je viens de faire un test en réutilisant le fichier .json, dans lequel j'ai collé la chaîne retournée par xhrGet, et ça fonctionne.
Donc a priori ça ne devrait pas être un souci de malformation du json.
Partager