Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# [résolu] Pb selection de ligne dans un arbre ou Bug ?

Envoyé par : syl

Date : 31/07/2007 13:30

Bonjour à tous

Je souhaite sélectionner la premiere ligne d'un arbre une fois que son datasource à été chargé, pour cela j'utilise un tree listener comme ci dessous :

var TreeListener3 = 
	{	item: null,
		willRebuild : function(builder) {},
		didRebuild : function(builder) 
		{	// alert("toto");
			builder.root.view.selection.select(0);
			var titi = builder.root.view.getCellText(builder.root.currentIndex, tree.columns["COL_id"]);
			
		}
	};
// Affectation du tree listener
 document.getElementById("TREE_3").builder.addListener(TreeListener3);

// demarrage de l'initialisation
document.getElementById("TREE_3").builder.rebuild();

Le code fonctionne bien si je décommente le "alert("toto");"

Par contre si je l'enlève, je ne peux plus utiliser la fonction getCellText, celle ci me renvoie l'erreur suivante :

Erreur : [Exception... "Component returned failure code: 0x80070057
(NS_ERROR_ILLEGAL_VALUE) [nsITreeView.getCellText]"  nsresult:  0x80070057 (NS_ERROR_ILLEGAL_VALUE)"  location: "JS frame :: chrome://aase/content/aaFormEditElem.js :: anonymous :: line 71"  data: no]

La ligne du tableau TREE_3 n'est pas grisée, par contre elle semble bien sélectionnée ceci etant vérifié le code suivant :

alert(builder.root.view.selection.currentIndex); 

Est-ce que c'est un bug ? quelqu'un à -t-il déja rencontrer ce problème ? Mon arbre est de type Dont-build-content, je travaille sous FF 2.005 sous XP et mon appli est "chromée"

Merci par avance

Syl

# Re: Pb selection de ligne dans un arbre ou Bug ?

Envoyé par : omicron

Date : 31/07/2007 14:08

Si tu as un tree asynchrone, il faut attendre la fin du chargement des données avant de sélectionner une ligne.

# Re: Pb selection de ligne dans un arbre ou Bug ?

Envoyé par : syl

Date : 01/08/2007 09:34

En fait c'est ce que je fait, car je déclenche ma selection de ligne sur l'évenement "didRebuild" du constructeur de Gabarit.

Cet évenement est censé être déclenché une fois le template reconstruit, donc les données chargées et disponibles (normalement ?!).

Merci pour ta réponse omicron,

# Re: Pb selection de ligne dans un arbre ou Bug ?

Envoyé par : Eric

Date : 01/08/2007 11:52

Juste une question : Comment au sein de ta fonction didRebuild est connue la variable tree dans tree.columns["COL_id"\] ?

# Re: [résolu] Pb selection de ligne dans un arbre ou Bug ?

Envoyé par : syl

Date : 01/08/2007 13:34

Pour la variable tree, c'est juste une erreur de syntaxe lorsque j'ai tronqué mon code pour le poster ici... désolé

En fait j'ai résolu mon problème de détection de fin de chargement de donnée en utilisant un XMLSinkObserver sur mes datasources d'arbre plutot qu'un listener sur le constructeur d'arbre, comme indiqué dans le tutoriel : RDF datasource details Je pensais que l'évenement "didRebuild" du constructeur d'arbre était suffisant pour se synchroniser sur la fin du chargement de donnée, mais dans le cadre de cette discussion ce n'était pas suffisant pour sélectionner mes lignes lors de cet évenement

# Re: [résolu] Pb selection de ligne dans un arbre ou Bug ?

Envoyé par : omicron

Date : 01/08/2007 13:47

C'était le sens de mon message : il faut observer la fin de chargement des données et non la fin de construction du gabarit

# Re: [résolu] Pb selection de ligne dans un arbre ou Bug ?

Envoyé par : Christophe Charron

Date : 03/08/2007 16:48

Cette remarque m'ouvre des perspectives. J'ai le même problème sur une liste. En terme de codage, cela donne quoi ?

Le code suivant, lâchement pompé, suffit-il, indépendemment de l'arbre, de la liste ou d'eun quelconque autre objet attaché au rdf ?

var observer = {
 onBeginLoad : function(sink){},
 onInterrupt : function(sink){},
 onResume : function(sink){},
 onError : function(sink,status,msg){},

 onEndLoad : function(sink){
   sink.removeXMLSinkObserver(this);
   sink.QueryInterface(Components.interfaces.nsIRDFDataSource);
 }
};
var   ds=rdfService.GetDataSource("http://www.xulplanet.com/tutorials/xultu/animals.rdf");
ds.QueryInterface(Components.interfaces.nsIRDFXMLSink);
ds.addXMLSinkObserver(observer);

# Re: [résolu] Pb selection de ligne dans un arbre ou Bug ?

Envoyé par : syl

Date : 06/08/2007 10:34

Merci omicron, je commence a saisir (un petit peu) les subtilités et les potentialités du controle des datasources.. Sinon pour le codage, on met la selection de la 1ère ligne sur l'évenement onEndLoad. Ca donne pour l'observer:

var observertree = {	onBeginLoad : function(sink){},
					onInterrupt : function(sink){},
					onResume : function(sink){},
					onError : function(sink,status,msg){},
					onEndLoad : function(sink)
					{	sink.removeXMLSinkObserver(this);
						document.getElementById("TREE_histo").view.selection.select(0);
					}
				};

Puis, pour l'affectation de l'observer à l'arbre et l'attribution du datasource, qui déclenche un chargement de donnée :

var ds3 = "http://localhost/aase/appli/masourcededonnee.php";
var rdfService1 = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
var ds=rdfService1.GetDataSource(ds3);
ds.QueryInterface(Components.interfaces.nsIRDFXMLSink);
ds.addXMLSinkObserver(observertree);
document.getElementById("TREE_arboelem").datasources=ds3;

Bonne journée

Syl

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.