Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# [résolu]Gérer un ensemble d'objets globalement ???

Envoyé par : Christophe Charron

Date : 16/03/2007 08:40

Il y a-t'il une manière native de gérer, dans sa globalité, un ensemble d'objets ? Je m'explique : j'ai 10 textbox et 10 radiobutton que je voudrais griser ou dégriser en bloc.

  • Dois-je les décliner un à un pour le faire ?
  • Dois-je les inclure dans une boite et faire une fonction qui parcourt tous les fils de la boite ?
  • Quelle méthode, attribut ou autre manip native existe ?

# Re: Gérer un ensemble d'objets globalement ???

Envoyé par : syl

Date : 16/03/2007 09:30

Il y a surement mieux, mais moi j'utilise une fonction de parcours de mon dom (tree walker) avec un test sur des attributs personnalisés que j'inclus dans mon xul. Le parcours se fait apres pour tous les éléments fils de "node" passés en paramètre à la fonction

Java script :

// Permet d'activer les widget avec "makdedisable" = true
function ActivateWidget(node) 
{	var filtre = 
{	acceptNode : function(n)	
				{	if  (n.getAttribute("makdedisable")=="true") return  NodeFilter.FILTER_ACCEPT;
					return NodeFilter.FILTER_SKIP;
				}
};
var tw = document.createTreeWalker(node, NodeFilter.SHOW_ALL, filtre, false); 
while(tw.nextNode())  tw.currentNode.setAttribute("disabled","false");
}

Puis dans mon fichier XUL :

<textbox id="montextbox" makedisable="true"/>

Mais si il y a plus direct, je suis preneur

Syl

# Re: Gérer un ensemble d'objets globalement ???

Envoyé par : hhf

Date : 17/03/2007 16:34

tres mauvaise methode, utilise les broadcaster/observer ou les command

exemple :

   <button id="button1" observes="id-brodcaster" label="button1"/>       
   <button id="button2" observes="id-brodcaster" label="button2"/>    
   <button id="button3" observes="id-brodcaster" label="button3"/>    
   <button id="button4" observes="id-brodcaster" label="button4"/>    
   <button id="button5" observes="id-brodcaster" label="button5"/>    
   <button id="button6" observes="id-brodcaster" label="button6"/>
   <broadcasterset>
     <broadcaster id="id-brodcaster" disabled="false"/>
   </broadcsterset>
   <button label="action" oncommand="document.getElementById('id-brodcaster').setAttribute('disabled', 'true');"/>

Regarde le tutorial d'un site qui s'apelle heu... www.xulfr.org, c'est très bien expliqué. Je sais pas si tu connais :-D tu peux même observer seulement certain attribut etc.. Encore un truc trop puissant en XUL

# Re: Gérer un ensemble d'objets globalement ???

Envoyé par : Christophe Charron

Date : 19/03/2007 12:11

Merci,

comme quoi, il faut relire régulièrement le tuto, si comme moi, on l'a d'abord lu sans en comprendre tous les tenants et aboutissants lors de la découverte de xul !!!

Saud qu'il faut toujours que je tombe sur un loup !!!!

Pour des effets visuels, je préférerai utiliser l'attribut readonly plutôt que l'attribut disabled. Or passer l'attribut readonly de true à false ne redonne pas la possibilité pour une textbox d'être en écriture. Il faut pour cela faire une removeAttribute("readonly") !!! Est-ce à considérer comme un bug ?

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="css/_graal.css" type="text/css"?>
<window id="montest" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript">
<![CDATA[
function pf_ro_oui() {
document.getElementById("t_b_01").setAttribute("readonly","true");
document.getElementById("t_b_02").setAttribute("readonly","true");
}
function pf_ro_non() {
document.getElementById("t_b_01").setAttribute("readonly","false");
document.getElementById("t_b_02").setAttribute("readonly","false");
}
function pf_ro_sup() {
document.getElementById("t_b_01").removeAttribute("readonly");
document.getElementById("t_b_02").removeAttribute("readonly");
}
]]>
</script>
<vbox flex="10">
  <textbox id="t_b_01" value="textbox 01" />
  <textbox id="t_b_02" value="textbox 02" flex="10"/>
  <button width="40" flex="1" label="positionner readonly vrai" crop="end" dir="normal" oncommand="pf_ro_oui()" />
  <button width="40" flex="1" label="positionner readonly faux" crop="end" dir="normal" oncommand="pf_ro_non()" />
  <button width="40" flex="1" label="supprimer readonly " crop="end" dir="normal" oncommand="pf_ro_sup()" />
</vbox>
</window>

J'imagine qu'il n'est pas possible d'utiliser un broadcaster pour ce type de traitement donc je vais essayer de voir avec les command

# Re: Gérer un ensemble d'objets globalement ???

Envoyé par : Christophe Charron

Date : 19/03/2007 13:11

Je ne sais pas ce que j'avais merdé, mais cela fonctionne très bien avec les observers ou les command ...

Merci

# Re: Gérer un ensemble d'objets globalement ???

Envoyé par : Christophe Charron

Date : 20/03/2007 09:47

En fait, "readonly" n'est pas disponible pour tous les champs. J'utilise donc "disabled" et je joue avec la couleur du texte pour éviter l'effet grisé. Voir : http://test03.christophe-charron.org/index.html#22

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.