5.2 - Attributs supplémentaires de gabarits

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.

Référencement de gabarits

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.

Déclaration des variables conteneur et membre

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.