Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# RDF tree

Envoyé par : woogluf

Date : 21/02/2006 22:21

Bonjour,

J'expérimente l'utilisation des datasource rdf est de tree. Je réussis bien à charge mon tableau (tree sous forme tabulaire et non d'arbre), je voudrais reccupérer l'identifiant de ma ligne sélectionnée. Voici en gros ma source RDF:

<?xml version="1.0" encoding="UTF-8"?>
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:row="http://dummy/rdf#">
<RDF:Seq about="urn:data:row">
<RDF:li>
<RDF:Description>
<row:id>2</row:id>
<row:nom>Dupont</row:nom>
<row:prenom>Jean</row:prenom>
</RDF:Description>
</RDF:li>
</RDF:Seq>
</RDF:RDF>

Et voici mon code :

var list=document.getElementById('liste');
var ressource list.view.getResourceAtIndex(list.currentIndex);

Ma question est comment réccupérer proprement mon identifiant (2 par exemple), sachant que mon tree à le drapeau "dont-build-content".

Merci d'avance.

# Re: RDF tree

Envoyé par : kriks

Date : 22/02/2006 10:31

essaie ça:

var rowIndex = list.currentIndex;
var col = list.columns['id'];
var monId = list.view.getCellText(rowIndex,col);

il faut évidemment que le treecol correspondant ait un id (ici 'id')

# Re: RDF tree

Envoyé par : woogluf

Date : 22/02/2006 11:53

Merci, je vais essayer. Mais ça m'embête un peu sur le principe, je ne veux pas faire apparaître la colonne id dans mon tree.

Je préférerais un truc du style:

var ressource list.view.getResourceAtIndex(list.currentIndex);
var monId=ressource.'getQqlChose()';

de manière à ne travailler que sur la source de donnée RDF, et non pas sur sa représentation visuelle.

# Re: RDF tree

Envoyé par : kriks

Date : 22/02/2006 15:52

un petit :

<treecol id="id" hidden="true" ignoreincolumnpicker="true"/>

devrait arranger les choses

# [Résolu] RDF tree

Envoyé par : woogluf

Date : 22/02/2006 22:04

Ca c'est de la bibouille !!!

Je ne veux pas perdre des fonctionnalitées d'interface pour cacher un identifiant !!!

Merci quand même pour tes réponses.

J'ai fini par trouver ce que je cherchais, voici le code :

// réccupération du service RDF
var RDF = Components.classes["@mozilla.org/rdf/rdf-service;1"]
	.getService(Components.interfaces.nsIRDFService);

// Réccupération du tree
var tree=document.getElementById('maListe');

// réccupération des sources de données associées au tree
var datasources = tree.database.GetDataSources();

// Il n'y en a qu'une dans mon example, donc je prends la première
var datasource = datasources.getNext();

if (datasource instanceof Components.interfaces.nsIRDFDataSource) {

	var idRS = RDF.GetResource("http://dummy/rdf#id");
	if (datasource instanceof Components.interfaces.nsIRDFDataSource) {

	// Je réccupère la ressource associé à la ligne voulue
	var resource=tree.view.getResourceAtIndex(tree.currentIndex);

	// Je réccupère la cible correpondant à ma ressource et à mon prédicat
	var resourceId=datasource.GetTarget(resource, idRS, true);;
		if (resourceId instanceof Components.interfaces.nsIRDFLiteral){
			// et voila, j'ai ma valeur
			alert(resourceId.Value);
		}
	}
}

La gros avantage de cette méthode, c'est que je n'ai pas besoin de supposer que le valeur recherchée soit dans une colonne précise, la valeur peut d'ailleurs ne pas être affichée du tout.

C'est vri que le code est plus lourd ;) ...

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.