Écrit par Neil Deakin.
Traduit par Alain B. (10/10/2005).
Page originale :
http://developer.mozilla.org/en/docs/XUL:Template_Guide:Additional Template Attributes
Attention : Ce tutoriel est ancien, incomplet, et n'est pas mis à jour. Il ne contient pas toutes les nouveautés du système de template de Gecko 1.9 / Firefox 3.0 qui est largement simplifié et permet d'utiliser sqlite ou xml comme source de données. Aussi est-il préférable d'aller consulter la version anglaise sur developer.mozilla.org.
Tous les gabarits utilisés jusqu'à présent avaient leur élément template
placé à l'intérieur de l'élément racine contenant l'attribut datasources
. Cependant, vous pouvez utiliser l'attribut template
pour faire référence à un gabarit situé ailleurs dans le document. Cette méthode vous permet de partager le même gabarit dans différentes parties de l'interface utilisateur. Firefox l'utilise pour l'affichage de ses marque-pages dans le menu et dans la barre d'outils, puisqu'il s'agit du même gabarit pour afficher les items du menu dans les deux cas. Il suffit d'utiliser un gabarit partagé et de faire une utilisation intelligente des règles multiples. Pour cette technique, placez un attribut template
sur l'élément racine en lui définissant l'id
d'un gabarit template
.
<listbox datasources="template-guide-photos5.rdf"
ref="http://www.xulplanet.com/rdf/myphotos"
template="photoTemplate"/>
...
<template id="photoTemplate">
...
</template>
Ce gabarit sera partagé avec tous les éléments qui font référence à l'id
photoTemplate. Ici, la boîte de liste n'a aucun fils, bien qu'elle puisse en avoir. Si vous lui ajoutez des fils, ils seront considérés comme étant du contenu statique comme dans le cas où le gabarit serait présent. Cependant, il est possible d'utiliser du contenu statique différent pour chaque usage, même quand le gabarit est partagé. Les attributs datasources
et ref
diffèrent également pour chaque usage, donc il est possible d'utiliser un gabarit partagé pour afficher la même structure plusieurs fois mais avec des noeuds de départ différents à chaque fois. Le contenu généré est toujours inséré à l'intérieur du noeud racine, dans cet exemple l'élément listbox
, pas à l'intérieur du gabarit.
Normalement, le conteneur et les variables membres sont déterminés par le constructeur de gabarits automatiquement. Le conteneur ou la variable du noeud de départ est spécifié dans la balise content
à l'intérieur d'une balise conditions
d'une règle, tandis que la variable membre est déterminée par la valeur de l'attribut uri
à l'intérieur du corps d'action. Ces deux variables peuvent être explicitement utilisées sur l'élément template
grâce à deux attributs.
<template container="?first" member="?item">
Les attributs container
et member
peuvent être utilisés pour spécifier les variables conteneur et membre. Cela ne présente pas un grand intérêt si ce n'est d'offrir une légère optimisation au constructeur qui n'a pas besoin d'analyser le corps d'action pour rechercher la variable membre lorsqu'il compile les règles. Vous pouvez également utiliser ces attributs pour rendre votre code plus clair lorsque vous avez des règles très complexes.
Un avantage possible est l'emploi de la syntaxe simplifiée dans laquelle vous ne spécifiez pas les variables ; à la place, vous utiliserez la syntaxe spéciale rdf:* pour les variables membre et conteneur. Grâce aux attributs container
et member
, vous pouvez utiliser des variables spécifiques à la place.
<hbox datasources="template-guide-photos5.rdf"
ref="http://www.xulplanet.com/rdf/myphotos">
<template container="?start" member="?photo">
<rule>
<image uri="?photo" src="?photo"/>
</rule>
</template>
</hbox>
Dans cet exemple, la variable ?photo peut être utilisée à la place de rdf:* (Cependant, vous pouvez utiliser l'une ou l'autre, et ce même si vous spécifiez la variable membre). Vous pouvez vous servir de notations de ce type pour rendre votre code plus lisible. Nous pourrions aussi utiliser la variable conteneur ?start dans le corps d'action. Si vous utilisez la syntaxe simplifiée et désirez utiliser la variable conteneur pour le contenu, vous devez employer l'attribut container
puisqu'il n'y a pas d'autre manière d'y faire référence. Notez également que l'élément rule
est requis ici, sinon le constructeur pensera que les attributs container
et member
sont des conditions servant aux tests.
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.