Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# surcharge en XBL

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.

# Re: surcharge en XBL

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.

# Re: surcharge en XBL

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.

# Re: surcharge en XBL

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.

# Re: surcharge en XBL

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.