Ceci est une idée fausse commune avec Extjs. Un Ext.data.TreeStore et Ext.data.Store ne sont pas vraiment similaires et n'héritent pas de l'autre.
Un magasin contient des données sous la forme d'un tableau de modèles:
[
{
attribute1,
attribute2,
...
},
...
]
Alors qu'un treestore contient des données sous la forme d'une structure arborescente des nœuds, comme ceci:
{
attribute1,
attribute2,
...,
children: [
{
attribute1,
attribute2,
...,
children: [
...
]
}
]
}
Due à ces structures complètement différentes sous-jacentes au magasin régulier et au magasin, les fonctions sur eux sont complètement différentes. Je suppose que dans votre exemple ci-dessus, l'utilisation correcte des fonctions de stockage et nœud serait:
var data1 = treestore.getRootNode().getChildAt(0).get(fieldname);
getRootNode()
obtient le nœud racine de votre arbre qui est représenté par la classe NodeInterface
qui a la méthode getChildAt(index)
qui récupère le premier nœud enfant du nœud racine. Ensuite, j'utilise la fonction get(dataIndex)
pour obtenir la propriété que vous voulez du noeud.
Avec ExtJS 4.2.x, l'indice du noeud passé par l'événement checkchange ne compte pas enfants de noeuds effondrés. Donc, avec le code ci-dessus, je vais obtenir le mauvais enregistrement du modèle. J'ai simplement ajouté "if (nodes [i] .isExpanded()) {" ... after "courant ++;" et ça a l'air de bien fonctionner. Bien que cela semble fonctionner, je ne vais probablement pas coller avec ce code car il semble un peu fragile. – nogridbag