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:

[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 : 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
            });
Tandis qu'avant, je faisais ça:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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"}]}
Et enfin, l'arbre:

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.