Manuel de référence du programmeur XUL

<broadcaster>

Attributs Enfants communs
id  * * *
action  
value  
oncommand  
   

 

<observes>

Attributs Enfants communs
id  * * *
element  
attribute  
mapto  
event  
   

Les animateurs (broadcasters) et les observateurs (observers) forment un mécanisme pour un nombre d'éléments qui sont avertis de l'information d'état et d'événement à partir d'un simple élément d'annonce. Quand un attribut sur un broadcaster change, le broadcaster annonce ce changement d'état aux observers intéressés -- qui indiquent qu'ils sont intéressés uniquement en identifiant le broadcaster approprié (ex, <observes element="l'id de celui qui m'intéresse">).

Ce mécanisme est utile pour préserver l'uniformité des différents éléments de l'IU (tels que la commande Cut dans un menu de contexte, le bouton Cut toolbar et la commande Cut du menu d'édition) quand ils accomplissent les mêmes tāches. Le rapport broadcaster/observer est flexible et puissant. Les sections suivantes fournissent des exemples de différentes manières dont ce rapport peut être exprimé en XUL.

Simples Observers

Les broadcasters sont en général des éléments invisibles, bien qu'ils n'aient pas besoin de l'être. N'importe quel élément peut être un broadcaster ou un observer et le rapport broadcaster/observer peut exister entre deux éléments quelconques. Quand un élément qui n'est pas explicitement un broadcaster annonce l'information, les éléments observers observent en nommant l'élément d'annonce avec l'attribut element. L'exemple suivant montre cette sorte de rapport broadcaster/observer, la moins utilisée, qui est celui entre deux éléments réguliers:

<menuitem name="cut" />
 
<titledbutton value="Cut">
  <observes element="cut" attribute="disabled"/>
</titledbutton>
...

Broadcaster un-vers-plusieurs

Bien que ce soit un choix simple de tirer profit du broadcasting, il est inefficace parce qu'il met un "menuitem" normal dans une position d'annonce sur un bouton, qui fait patie de l'IU. Un meilleur mécanisme est de définir un "noeud" de broadcaster séparé, auquel tous les éléments visibles de l'IU prêtent attention. De cette façon, l'état du noeud peut être mis à jour dans un endroit simple et facilement remarquable.

<broadcaster id="cut"/>
 ...
<menuitem name="Cut">
 <observes element="cut" attribute="disabled"/>
</menuitem>
 ...
<titledbutton value="Cut">
 <observes element="cut" attribute="disabled"/>
</titledbutton>
 ... 

Commande Noeud et attribut observes

Dans l'exemple précédent, l'item de menu et le bouton de titre prennent l'attribut disabled du noeud de broadcaster. Le noeud de broadcaster possède des attributs qui peuvent être observés par d'autres éléments. Quand vous voulez annoncer tous les attributs d'un noeud, vous pouvez également utiliser une construction légèrement différente. Regardez l'exemple suivant:

<command id="cutCommand" 
  oncommand="specialCut()" 
  value="Cut Me!"
  disabled="false" />

<menuitem observes="cutCommand"/> 
<titledbutton observes="cutCommand"/> 
<key observes="cutCommand"/>  
... 

Dans cette construction, le broadcaster est un noeud de commande, dont la responsabilité est d'annoncer la fonctionnalité de la commande à tous les éléments qui l'observent. L'accès à la commande specialCut() est centralisé dans un endroit simple. D'une certaine manière, il est également protégé par l'attribut disabled, qui contrôle si un des noeuds observants peut utiliser la commande ou pas et si sa propre IU reflète la disponibilité de la commande ou pas. Un élément d'IU observant le broadcaster cutCommand est automatiquement invalidé en raison de la manière dont les observers prennent les attributs des broadcasters dans ce deuxième type de rapport broadcaster/observer. Dans tous les cas où l'élément d'IU inclut un attribut de valeur value qui indique ce qui est réellement affiché, l'attribut de la valeur value du broadcaster est également utilisé.

Autres attributs Observer

 


 

Last updated: 2/21/00 Ian Oeschger
French version (6/28/00) Matthieu Camus