Envoyé par : lfournier
Date : 31/01/2007 18:29
J'utilise une table (XUL tree) peuplée par une source RDF de type Bag. La fonction getRessourceAtIndex me retourne bien le numéro de la ligne sélectionnée car l'arbre est du type 'dont-build-content' et je veux pouvoir trier facilement les colonnes. Je n'arrive pas à lire le contenu de la ligne sélectionnée dans ce cas (pas de DOM), avec des 'ArcLabelsOut' et 'GetTarget' dans tous les sens. Auriez-vous un exemple d'arbre RDF avec le contenu d'une cellule de la ligne sélectionnée s'affiche en alert ? Autrement dit, je n'arrive pas à me balader dans l'arbre RDF similaire ment a ce que je ferais avec DOM, que ce soit de la racine de l'arbre ou d'un nœud particulier (par exemple la ligne sélectionnée).
Merci de votre aide.
Envoyé par : papy
Date : 01/02/2007 11:28
Une troisième solution s'offre à toi pour ce cas, utiliser directement les interfaces de l'arbre.
Jette un coup d'oeil à l'interface nsITreeView et aux specs de l'arbre
Voila un exemple :
function monEvenement() { var tree = document.getElementById('monArbre'); var idx = tree.currentIndex; if(typeof(idx) == 'undefined' || idx < 0) return; var text = tree.view.getCellText(idx, tree.columns.getFirstColumn()); alert('text'); }
P.S: je suis actuellement en train d'essayer de mettre en place une solution de ce type, mais je rencontre quelques problèmes de plantage, je ne sais pas si c'est du à la méthode ou si ca vient d'autre chose.
Envoyé par : papy
Date : 01/02/2007 11:44
Par rapport a mon post précédent, j'ai fait des tests supplémentaires, les problèmes que je mentionne apparaissent même sans utiliser les interfaces de l'arbre, le problème ne vient donc pas de là.
Envoyé par : lfournier
Date : 02/02/2007 10:00
Pour compléter ma question, voici un exemple volontairement simplifié de mon problème:
<?xml version="1.0"?> <RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:row="http://dummy/rdf#" xmlns:NC="http://home.netscape.com/NC-rdf#"> <RDF:Bag about="urn:data:row"> <RDF:li> <RDF:Description> <row:c1>toto</row:c1> </RDF:Description> </RDF:li> <RDF:li> <RDF:Description> <row:c1>tata</row:c1> </RDF:Description> </RDF:li> </RDF:Bag> </RDF:RDF>
<?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <script language="javascript"> function do_select(event) { // Je voudrais faire afficher les donnees 'toto' et 'tata' // en fonction de la selection // Or, voici seulement ce que j'arrive a faire: // Merci pour votre aide var atree = event.target; if (atree.currentIndex != -1) { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); alert (atree.view.getResourceAtIndex(atree.currentIndex).Value); } var RDF = Components.classes["@mozilla.org/rdf/rdf-service;1"]. getService(Components.interfaces.nsIRDFService); // A changer selon la position de la source RDF: var ds = RDF.GetDataSource("http://localhost:8000/t/xul/table.rdf"); var name = RDF.GetResource("urn:data:row"); var targets = ds.ArcLabelsOut(name); while (targets.hasMoreElements()){ var predicate = targets.getNext(); if (predicate instanceof Components.interfaces.nsIRDFResource){ var target = ds.GetTarget(name, predicate, true); if (target instanceof Components.interfaces.nsIRDFResource){ alert("Resource is: " + target.Value); } else if (target instanceof Components.interfaces.nsIRDFLiteral){ alert("Literal is: " + target.Value); } } } } </script> <tree enableColumnDrag="true" id="tree" flex="1" flags="dont-build-content" ref="urn:data:row" datasources="/t/xul/table.rdf" onselect="do_select(event)" seltype="single">' <treecols> <treecol id="c1" label="col1" flex="1" class="sortDirectionIndicator" sort="rdf:http://dummy/rdf#c1"/> <splitter class="tree-splitter"/> </treecols> <template><treechildren><treeitem uri="rdf:*"><treerow> <treecell label="rdf:http://dummy/rdf#c1"/> </treerow></treeitem></treechildren></template> </tree> </window>
Merci
Envoyé par : ballinette
Date : 02/02/2007 18:39
Pour compléter la réponse de papy (ou plutôt la reformuler), voilà une version de ta fonction do_select() qui répond à ce que tu veux. Elle récupère les données dans le contenu affiché de l'arbre et non dans le RDF, c'est comme ça que je fais avec mes développements gérant du RDF, et même si ce n'est pas toujours très propre, ça ne m'a jamais posé de problème ;)
function do_select(event) { var atree = event.target; if (atree.currentIndex > -1) { alert(tree.view.getCellText(atree.currentIndex,atree.columns.getNamedColumn('c1')); } }
Envoyé par : lfournier
Date : 05/02/2007 09:09
Merci, super cela marche !
Je pense que cela peux servir à d'autres, car j'ai trouvé peu d'info sur le Web pour ce pb assez classique.
...deux petites erreurs de syntax dans le code de balinette
function do_select(event) { var atree = event.target; if (atree.currentIndex > -1) { alert(atree.view.getCellText(atree.currentIndex,atree.columns.getNamedColumn('c1'))); } }
Merci encore, et j'espère vous informer bientôt d'une nouvelle appli XUL.
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.