Forums : Template et RDF

Aller à la discussion :  Plus récente Plus ancienne

# Arbre RDF sans DOM, Lecture contenu ligne selectionnée

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.

# Re: Arbre RDF sans DOM, Lecture contenu ligne selectionnée

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.

# Re: Arbre RDF sans DOM, Lecture contenu ligne selectionnée

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à.

# Re: Arbre RDF sans DOM, Lecture contenu ligne selectionnée

Envoyé par : lfournier

Date : 02/02/2007 10:00

Pour compléter ma question, voici un exemple volontairement simplifié de mon problème:

  • le fichier RDF:
<?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>
  • le fichier XUL contenant aussi le JS
<?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>
  • Comment faire afficher 'toto' ou 'tata' selon la sélection ?

Merci

# Re: Arbre RDF sans DOM, Lecture contenu ligne selectionnée

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'));
 }
}

# [resolu] Re: Arbre RDF sans DOM, Lecture contenu ligne selectionnée

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.