Envoyé par : jwo
Date : 31/03/2008 18:39
Bon petite question sur les list box.
J'ai une windows qui s'ouvre onclick sur un label (ca ca marche) avec une liste dedans que je souhaite remplir depuis mon .js.
voici la fenetre window
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <window id="raWin" title="RA" orient="horizontal" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <title value ="RA"/> <listbox id="winList"> <listhead> <listheader label="Topic"/> <listheader label="Keywords"/> <listheader label="from"/> <listheader label="cost ($)"/> <listheader label="weight (%)"/> </listhead> <listcols> <listcol/> <listcol/> <listcol/> <listcol/> <listcol/> </listcols> <listitem> <listcell label="topic test"/> <listcell label="mot test"/> <listcell label="provenance test"/> <listcell label="prix test"/> <listcell label="poids test"/> </listitem> </listbox> </window>
et ce que je souhaite faire dans mon .js
//updating RAwindow var list = document.getElementById("winList"); var listitem = document.createElement("listitem"); listcellTop=document.createElement("listcell"); listcellTop.label="test2Top"; listitem.appendChild(listcellTop); listcellWord=document.createElement("listcell"); listcellWord.label="test2Word"; listitem.appendChild(listcellWord); listcellFrom=document.createElement("listcell"); listcellFrom.label="test2From"; listitem.appendChild(listcellFrom); listcellCost=document.createElement("listcell"); listcellCost.label="test2Cost"; listitem.appendChild(listcellCost); listcellWeight=document.createElement("listcell"); listcellWeight.label="test2Weight"; listitem.appendChild(listcellWeight); list.appendChild(listitem);
En bref je crée 5 celle que je veux ajouter a un item que je veux lui meme ajouter a ma liste dont l'id est winlist.
Et ca ne fait rien :(
D'autre part comment vider cette liste de ses cells aussi ?
Merci d'avance
Envoyé par : thx1138
Date : 01/04/2008 02:46
Pour vider ton listbox, tu peux faire un truc du genre :
var list = document.getElementById("winList"); for (var i=0, T=list.getRowCount(); i<T; i++) { list.removeItemAt(0); }
et remplace :
listcellTop.label="test2Top";
par
listcellTop.setAttribute('label', 'test2Top');
Envoyé par : jwo
Date : 01/04/2008 07:38
Merci pour ta réponse,
Pour vider, merci c'est la fonction que je recherchais.
En revanche la deuxième partie ne change rien :( c'est pas là ou est l'erreur. Je trouve pas ca doit etre une bêtise parce que c'est assez simple quand meme :)
Merci encore !
Envoyé par : jwo
Date : 01/04/2008 11:36
Bon apparemment le pb c'est que le getElement ne fonctionne pas car ma window est herbergée dans un win.xul et non dans le main.xul qui appelle le javascript ou j'execute tout ce code.
Quelqu'un aurait une solution? Finalement ca se rapproche de mon autre post ou je cherche a controle l'interface d'autres xul
Chui vraiment bloqué,
Merci pour tout aide
Envoyé par : jwo
Date : 01/04/2008 13:32
Je trouve vraiment pas,
meme en utilisant une variable test pour stocker var test=window.open("mafenetre.xul", "titre", ...)
quand je fais test.document.getElementById ca plante et test.getElementById (ca j'y croyais moins ca n'a pas de sens) non plus...
edit: en fait ce qu'il me faudrai c'est le symétrique de window.opener d'après ce que j'ai lu.
Il faut que je puisse passer des info a ma fenetre "fille" (plus encore, modifier ses propres infos")
Envoyé par : jwo
Date : 01/04/2008 14:30
Bon je récapitule parce qu'a la relecture du thread c'est pas follement clair lol:)
1- j'ai un main.xul ou je lance une statusbar avec un panel qui lui a un label une jolie icone etc et qui change de label en incluant un javascript script.js.
2-Dans ce script.js en fonction du changement d'url et d'autres parametres je récupère des elements de la page web courante et j'affiche des truc en label de mon statuspanel.
3-dans ce javascript je fais un test=windows.open('chrome://.../win.xul', 'rawin', param) dans une fonction lancée dans le main.xul onclick sur le panel dans la statusbar. Ca ca fonctionne. Note : je prend soin de décalrer la variable test en global pour l'utiliser par la suite.
J'aimerai maintenant actualiser ce uq'il y a dans win.xul (la fenetre qui s'affiche donc quand je clic sur le pannel) à l'aide de cette liste.
Je n'arrive pas à obtenir la liste crée dans win.xul qui est donc la fenetre fille lancée script.js qui lui est lancé dans main.xul
Voila j'espère que c'est plus clair et désolé pour avant
merci a tous
Envoyé par : jwo
Date : 01/04/2008 17:37
Bon c'est probablement pour ca que ca marche pas
Notez cependant que le retour de l'appel à open() se fait avant que la fenêtre ne soit totalement chargée, donc certains appels comme win.document.getElementById() ne fonctionneront pas. Pour contourner cette difficulté, vous pouvez déplacer le code d'initialisation vers un gestionnaire load de la fenêtre ouverte, ou passer une fonction de callback comme décrit ci-dessous.
source : http://developer.mozilla.org/fr/docs/Travailler_avec_des_fen%C3%AAtres_dans_le_chrome#callback
Cependant je vois pas en quoi la fonction callback peut m'aider ? et je ne sais pas ce qu'est un gestionnaire de load.
Mais il parait logique que si la variable ou l'on stock l'ouverture de la fenetre (la référence) est crée avant que les éléments de la fenetre soient crées, le getelementid de ces objet ne renvoie rien !
Anyone ?
Merciiii
Jwo
Envoyé par : jwo
Date : 02/04/2008 14:25
Problem solved :
finalement quand je cree la window, j'envoi mon array en argument et je gere le script directement dans mon win.xul après pour mettre les élément de mon array en liste :)
En fait je vais meme faire un objet ca sera plus propre.
bref mici
note : j'ai trouvé la solution par là
http://developer.mozilla.org/fr/docs/Travailler_avec_des_fen%C3%AAtres_dans_le_chrome#callback
Jwo
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.