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
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.
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,
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"\] ?
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
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
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);
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.