Envoyé par : lucas
Date : 12/09/2005 13:57
Bonjour à tous.
Il m'arrive un problème que je trouve bizarre.
Je cherche à ajouter des méthodes à un élément de type treeitem en passant par XBL. Je crée l'implémentation, et je lie tout ça avec un css, normal.
L'implémentation marche quand je récupère un treeitem qui se trouve dans le document xul original. Cependant, lorsque je crée un treeitem dynamiquement, je récupère bien l'objet, mais si j'appelle la méthode, le script lance une exception qui me dit que la fonction n'existe pas.
Voici le fichier xul :
<?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin" type="text/css"?> <?xml-stylesheet href="chrome://test/content/test.css" type="text/css"?> <window id="fenetre_principale" title="Test" height="400" width="400" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <script src="test.js"/> <hbox> <button label="test" onclick="test()"/> </hbox> <tree id="bonjour" hidecolumnpicker="true" flex="1"> <treecols id="truc"> <treecol id="treecol" primary="true" flex="1"/> </treecols> <treechildren id="children"> <treeitem id="item1" label="item1"/> </treechildren> </tree> </window>
(Le fichier test.css contient le lien vers le binding).
Le fichier test.js est celui-ci :
function test() { var item1 = document.getElementById("item1"); var item2 = document.createElement("treeitem"); item2.setAttribute("label", "item2"); item2.setAttribute("id", "item2"); var children = document.getElementById("children"); children.appendChild(item2); item1.toto(); item2.toto(); }
La méthode toto est juste censée me lancer un alert. Cela marche pour item1, mais pas pour item2 (erreur : item2.toto is not a function).
Pourtant, l'arbre DOM m'indique bien un treeitem, au bon endroit. J'ai ce problème même si je récupère item2 en invoquant getElementById.
Il doit y avoir quelque chose qui m'échappe.
Si vous avez une idée...
Merci.
Envoyé par : Utilisateur anonyme
Date : 12/09/2005 15:29
Il y a de forte probabilité que ca soit une erreur de liaison avec ton XBL au niveau de ton css.
Envoyé par : lucas
Date : 12/09/2005 16:04
Il y a de forte probabilité que ca soit une erreur de liaison avec ton XBL au niveau de ton css.
Non, j'ai trop vérifié. Et puis, comme j'ai dit, ça marche pour item1.
J'ai plutôt l'impression que ça vient d'un problème de synchronisation XBL. Ca ne marche pas au début, et puis au bout d'un moment, ça marche. Je ne sais pas trop ce que c'est, et comment résoudre le problème...
Merci quand même.
Envoyé par : lucas
Date : 13/09/2005 11:13
Il s'agit bien d'un problème louche de synchronisation. En mettant un autre écouteur, on arrive à accéder à la méthode de treeitem après 2 ou 3 secondes (!).
Une solution est apparemment de mettre
(...) children.appendChild(item2); document.addBinding(item2, "chrome://test/content/test.xml#treeitem");
dans le javascript, pour forcer le chargement du binding.
Cependant, je trouve cette méthode peu esthétique et légèrement contraignante. Si vous avez d'autres pistes ou indications, n'hésitez pas.
Merci.
Envoyé par : laurentj
Date : 13/09/2005 17:58
il me semble que tu es tombé sur un bug connu de xbl..
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.