dijit.tree comment mettre en œuvre un effondrement de toutes les fonctionnalités en utilisant uniquement le magasin?

J'ai un chargement paresseux dijit.tree que je veux réutiliser dans beaucoup d'endroits après que ses données aient été chargées. Mais si je remplace simplement l'objet store dans les autres arborescences par celui qui contient le plus de données, les nœuds sont tous développés. Je veux modifier le magasin de sorte que tous les éléments sont réduits avant de le définir comme un magasin dans le nouvel arbre. pouvez-vous me dire comment y parvenir?

0

1 Réponses

You cannot use the store for this, as it does not contain any information of the state of the tree nodes. This 'magic' is performed via TreeNode, see some examples here

La «solution parfaite» consisterait à déterminer les chemins dont vous avez besoin, puis à définir le chemin de votre arbre à traverser dans les treenodes désirés.

However, since your lazyloading, you need to check the state - while initializing a tree it should be UNCHECKED. However there is a cookie-functionality inbuilt which probably is kicking in, make sure to create new tree's with { persist:false }

You could also extend your tree, so that it will accept collapseChildren(TreeNode) as follows - and then call tree.set("path", [pathsArray]);

collapseChildren : function(top) {
        var self = this;
        if(!top || !self.model.mayHaveChildren(top.item)) return;
        top.getChildren().forEach(function(n) {
                if(n.item.children) {
                        //dojo.style(n.getParent().containerNode, { overflowY: 'hidden', overflowX: 'hidden'});
                        self._collapseNode(n);
                        self.collapseChildren(n);
                }
        });
},

MODIFIER:

Si l'indicateur autoExpand est passé au constructeur, l'arborescence est initialement affichée avec tous les nœuds développés.

     

Vous pouvez ensuite appeler collapseAll() et expandAll() pour réduire et développer l'arborescence, respectivement.    http://livedocs.dojotoolkit.org/dijit/Tree-examples#id3

0
ajouté
regardez le problème est que quand je place seulement le magasin du vieil arbre comme le magasin du nouvel arbre, je vois les nœuds développés exactement comme ils étaient dans l'arbre précédent. Donc je pense que c'est basé sur le magasin.
ajouté l'auteur MozenRath, source
ils tirent xhr seulement si l'enfant n'est pas déjà peuplé
ajouté l'auteur MozenRath, source
Merci beaucoup @mschr!
ajouté l'auteur MozenRath, source
essayé d'utiliser persist: false comme indiqué ci-dessus? Les clics sur un arbre génèrent un cookie pour stocker des chemins d'arbre entre deux chargements de pages, pensant que cela pourrait être la même chose ici? Est-ce que votre arbre nouvellement créé déclenche XHR sur les conteneurs enfants 'd'ouverture'?
ajouté l'auteur mschr, source
assurez-vous que l'indicateur autoExpand est false, puis utilisez tree.set ("path", [pathsArray]); pour ouvrir ceux que vous voulez ouvrir
ajouté l'auteur mschr, source