Générer tree à partir d'un store
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:
Citation:
[Widget dijit.Tree, arbre] srcNodeRef=div#arbre _connects=[5] : error loading root children: TypeError: this._arrayOfTopLevelItems is undefined message=this._arrayOfTopLevelItems is undefined
La seule chose qui a changé, c'est le store.
Je fais ça :
Code:
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
}); |
Tandis qu'avant, je faisais ça:
Code:
1 2 3
| var store = new dojo.data.ItemFileWriteStore({
url: "1107.json"
}); |
Pour info, voici d'autres bouts de code qui peuvent aider.
La chaîne JSON récupérée(valide d'après JSONLint.com):
Code:
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"}]} |
Et enfin, l'arbre:
Code:
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.