Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# [ résolu] Arbre généré dynamiquement

Envoyé par : syl

Date : 27/04/2007 11:49

Bonjour à tous,

J'ai un souci sur un arbre RDF généré dynamiquement. L'idée est de modifier les colonnes et le template de l'arbre en fonction des données à afficher. Voici la tecnique que j'utilise :

  • lecture liste des colonnes à afficher (structure de l'arbre) sur le serveur via service WEB en POST(ça fonctionne tres bien). En même temps, Le serveur execute la requete SQL demandée et stocke le résultat dans une variable de session pour utilisation ultérieure.
  • Le client génere les colonnes et les éléments du template via manipulation du DOM en javascript, en fonction de la réponse du serveur(ça fonctionne bien, mes colonnes se crée et le DOM semble correct (vérifié par DOM inspector)
  • Le client affecte une datasource au tree pointant sur une page php (via GET) générant le RDF a partir des données stockées au préalable dans la variable de session. (ça fonctionne bien aussi).

Tout semble correct, mais je n'arrive pas afficher mes résultats dans mon tree, et ça me prend la tête... Voici le xul :

<tree id="TREE_result" datasources=""  ref="urn:data" flex="10" flags = "dont-build-content">
					<treecols id="TREECOLS_result">
						<!-- Contenu rempli dynamiquement -->
					</treecols>
					<template>
						<rule>
							<conditions>
								<content uri="?uri"/>
								<member container="?uri" child="?result"/>
							</conditions>
							<bindings id="BIND_result">
								<!-- Contenu rempli dynamiquement -->
							</bindings>
							<action>
								<treechildren>
									<treeitem uri="?result" >
										<treerow id="TREEROW_result">
											<!-- Contenu rempli dynamiquement -->
										</treerow>
									</treeitem>
								</treechildren>
							</action>
						</rule>
				</template>	
			</tree>

Voici le java script :

var nbcol = reponse.data.getElementsByTagName("col").length;
	for(j=0; j<nbcol; j++)
	{	treecols = document.getElementById("TREECOLS_result");
		col = reponse.data.getElementsByTagName("col")[j].textContent; // col = nom de colonne
		newcol = document.createElement("treecol");
		newcol.setAttribute("id","COL_"+col);										//id de la colonne,en "COL_"+ nom champ
		newcol.setAttribute("label", col);											//label de la colonne = nom du champs
		newcol.setAttribute("sort","rdf:http://www.aase.org/results/rdf#"+col);		// ressource de classement = nom de la ressource rdf
		newcol.setAttribute("sortDirection","descending");							// Sort direction en croissant par défaut
		newcol.setAttribute("class","sortDirectionIndicator");						// Classe de la colonne avec affichage fleche sens du classement
		newcol.setAttribute("flex","1");											// flex="1" par défaut
		if(j==1) newcol.setAttribute("sortActive",true);							// tri croissant sur la 2ème colonne par défaut (la 1ère étant attribuée à l'ID
		if(j==0) 
		{	newcol.setAttribute("hidden",true);										// Masquage par défaut de la première colonne (id)
			newcol.setAttribute("primary",true);
		}	
		treecols.appendChild(newcol);												// création de la nouvelle colonne
		if(j<nbcol-1) 																// SI on n'est pas à la derniere colonne alors on insere un splitter
		{	newsplitter = document.createElement("splitter");	
			newsplitter.setAttribute("class","tree-splitter");
			treecols.appendChild(newsplitter);
		}
	}
	// préparation du template des ligne du tableau
	
	for(j=0; j<nbcol; j++)	// Remplissage des bindings
	{	col = reponse.data.getElementsByTagName("col")[j].textContent;
		bindings = document.getElementById("BIND_result");
		newbinding = document.createElement("binding");
		newbinding.setAttribute("subject", "?result");
		newbinding.setAttribute("predicate", "http://www.aase.org/results/rdf#"+col);	//label de la colonne = nom du champs
		newbinding.setAttribute("object", "?"+col);											// ressource de classement = nom de la ressource rdf
		bindings.appendChild(newbinding);																
	}
	
	for(j=0; j<nbcol; j++)	// Remplissage des treecell
	{	col = reponse.data.getElementsByTagName("col")[j].textContent;
		treerow = document.getElementById("TREEROW_result");
		newtreecell = document.createElement("treecell");
		newtreecell.setAttribute("label","?"+col);
		treerow.appendChild(newtreecell);																
	}

	
	//attribution  du datasource
	
	document.getElementById("TREE_result").setAttribute("datasources", "");
	document.getElementById("TREE_result").setAttribute("datasources", serveur1+"?action=peupletreeresult&datasource="
		+reponse.data.getElementsByTagName("datasource")[0].textContent);

et le RDF :

<?xml version="1.0" encoding="utf-8"?>
<RDF 	xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
	xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
	xmlns:AA="http://www.aase.org/results/rdf#">

<Bag about="urn:data">
	<li>
		<Description AA:id_fluide="1" AA:nom_fluide="Electricité" AA:abbrev_fluide="ELEC"/>
	</li>
	<li>
		<Description AA:id_fluide="2" AA:nom_fluide="Gaz Naturel" AA:abbrev_fluide="GAZ"/>
	</li>
	<li>
		<Description AA:id_fluide="3" AA:nom_fluide="Fioul" AA:abbrev_fluide="FOD"/>
	</li>
</Bag>
</RDF>

Je me demande si ma méthode est bonne ? ou il y a peut être quelquechose d'évident mais je le vois pas !

Merci par avance

Syl

# Re: Arbre généré dynamiquement

Envoyé par : syl

Date : 29/04/2007 18:02

Apres avoir cherché, le souci venait du fait que mon arbre n'affichait aucune ligne (j'ai du spécifié un attribut rows sur celui-ci pour forcer l'affichage de ligne). Je m'en vais de ce pas revoir le tutoriel sur le modele de boite et les flex pour avoir une présentation correcte, sans spécifier un nombre de ligne à mes arbres...

PS : je ne sais comment modifié le titre des discussions, c'est à dire mettre un "[résolu\]" devnat le sujet de celle-ci. Comment-fait-on ?

Merci

Syl

# Re: Arbre généré dynamiquement

Envoyé par : Ner0lph

Date : 29/04/2007 18:18

syl a écrit :

PS : je ne sais comment modifié le titre des
discussions, c'est à dire mettre un "[résolu\]"
devnat le sujet de celle-ci. Comment-fait-on ?

Ben, édite ton premier message et modifie-z-en (^_^) le titre.

# [résolu] Re: Arbre généré dynamiquement

Envoyé par : syl

Date : 29/04/2007 18:23

Bon OK, j'ai rien dit ; )

Bonne soirée

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.