Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > Dojo
Dojo Forum d'entraide sur le framework Dojo
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/01/2012, 16h55   #1
Invité de passage
 
Inscription : novembre 2009
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 3
Points : 1
Points : 1
Par défaut [V1.7] Récupération infos du parent d'un noeud d'un TreeGrid

Bonjour,

Je me suis lancé dans l'utilisation de L'API Dojo il y a quelques jours et je me retrouve confronté à un problème concernant un formatter que j'utilise dans un TreeGrid.

En effet, j'ai construit un dojox.grid.TreeGrid utilisant un store ItemFileReadStore qui me permet d'avoir l'affichage des informations que je désire, ce qui marche bien.

J'ai cependant voulu faire évoluer l'affichage pour rajouter des informations au niveau de mes enfants contenus dans les noeuds parents.

En gros la structure de mon arbre est la suivante :
+ Data0
+ Data1
+ Data2
nbCrash, Devices

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
		var layout = [ 
			{ cells: [
					[ 
						{ field: "data0", name: data0Title, width: "200px", formatter: data0Formatter}, 
						{ field: "datas1", 
							children: [
								{ field: "data1", name: data1Title, width: "300px", formatter: data1Formatter},
								{ field: "datas2",
									children: [
										{field: "data2", name: data2Title, formatter: data2Formatter},
										{field: "devices",
											children: [
												{field: "nbCrash", name: "Nb Crash", formatter: nbCrashFormatter},
												{field: "device", name: "Devices", formatter: deviceFormatter}
											],
											aggregate: "sum",
											itemAggregates: [ "nbCrashSum", "nbDevicesCnt" ]
										}
									],
									aggregate: "cnt"
								}
							],
							aggregate: "cnt"
						}
					]] 
				}					
			];

Mon problème est qu'au niveau du noeud "nbCrash" je voudrais pouvoir afficher dans mon formatter la valeur de ses noeuds parents pour avoir un
lien ayant en paramètre ces valeurs qui sera de la forme :
<a href="action.do?param0=data0&param1=data1&param2=data2> nbCrash" </a>.

Pour celà j'ai implémenté le formatter "nbCrashFormatter" de ma colonne "nbCrash". Mais je n'arrive pas à récupérer les labels de mes noeuds parents.

J'ai essayé d'utiliser la méthode store.fetch(query: { ...) mais je n'arrive pas à comprendre comment filtrer sur les enfants.
Auriez-vous une idée de comment je devrais attaquer le problème s'il vous plait ?
Abrhut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 10h00   #2
Expert Confirmé
 
Avatar de emmanuel.remy
 
Emmanuel REMY
Inscription : novembre 2005
Messages : 2 844
Détails du profil
Informations personnelles :
Nom : Emmanuel REMY
Âge : 43

Informations forums :
Inscription : novembre 2005
Messages : 2 844
Points : 3 589
Points : 3 589
Salut,

J'ai regardé un bon moment mais je n'entrevois pas de solution très simple. Soit tu parcours tes données pour retrouver la bonne arbo (tu peux utiliser aussi JsonPath dans dojox) soit on peut passer par un "path" géré en interne par le treegrid (un élément de la grid va avoir un path du style "1/2/0" pour le premier enfant du troisième niveau du troisème enfant du second niveau pour la seconde entrée du premier niveau, c'est base 0)
Le contexte du formater (le this) correspond à la cellule. A partir d'elle tu peux récupérer une propriété grid qui fournit une propriété cachée _by_idty_paths qui elle donnet les path en fonction des ID... des objets.

De là tu connait ta position dans l'arbre et alors tu peux faire un:
Code :
1
2
 
var path = new dojox.grid.TreePath(TON PATH ICI, this.grid);
Cet objet Treepath (dans dojox/grid/TreeGrid.js) fournit alors des méthodes previous, next, children, parent, mais aussi item() qui renvoie l'Item concerné par le niveau. Tu peux donc imaginer qlq chose comme:

Code :
1
2
3
4
5
6
 
//c'est un ex, pas ta réalité...
var itemParent = path.parent().item();
data2=itemParent.data2;
data1= itemParent.parent().next().item().data1;
...
Voilà je ne vois pas comme ça d'autres solutions "native", et c'est bien dommage car il y a clairement un manque. D'un autre côté je ne connais pas super bien le Treegrid, donc peut-être que quelqu'un a déjà été confronté au pb.

ERE
__________________
Quand une tête pense seule, elle devient folle.
emmanuel.remy est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/01/2012, 10h26   #3
Invité de passage
 
Inscription : novembre 2009
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 3
Points : 1
Points : 1
Bonjour Emmanuel,

Le TreePath que tu proposes me semble une excellente solution. C'est ce dont j'avais besoin.

En attendant, par manque de temps j'ai trouvé une solution intermédiaire qui ne me plait pas vraiment :

J'ai dupliqué les informations parent dont j'avais besoin au niveau du noeud enfant qui m'intéresse et dans ma définition de ma structure layout au lieu de lui passer la property à afficher, je lui passe "_item"
Code :
{field: "_item", name: data2Title, formatter: data2Formatter, noresize: true}
Ainsi le formatter est appelé avec le noeud en paramètre ce qui me permet d’interroger directement le store pour avoir toutes les properties voulues :
Code :
store.getValue(item, "nomField");
Je te remercie de tes efforts. Je marque en résolu
Abrhut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 11h01   #4
Expert Confirmé
 
Avatar de emmanuel.remy
 
Emmanuel REMY
Inscription : novembre 2005
Messages : 2 844
Détails du profil
Informations personnelles :
Nom : Emmanuel REMY
Âge : 43

Informations forums :
Inscription : novembre 2005
Messages : 2 844
Points : 3 589
Points : 3 589
Re,

C'est effectivement une solution rapide et tranquille de dupliquer les infos. J'y avais pensé mais je l'avais écartée car elle devient vite infernale, surtout si on utilise un autre type de store (JsonRest par exemple).

Le principal reste que cela fonctionne avec ta solution !

ERE
__________________
Quand une tête pense seule, elle devient folle.
emmanuel.remy est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h21.


 
 
 
 
Partenaires

Hébergement Web