Réutilisabilité
Un use est un objet (conforme au use du canvas) :
| Champ | Requis | Description |
|---|---|---|
name | Oui¹ | Le metadata.name du composant. Clé de résolution principale. |
id | Non | Épingle GUID durable ; gagne sur name quand les deux sont présents. |
style | Non | Style nommé en cascade vers les éléments de contenu inclus de niveau supérieur qui n'en déclarent aucun. |
data | Non | $data scoped intégrés dans le composant (voir Flux de données). |
override | Non | Précédence de fusion de configuration — voir Règles de fusion. |
¹ Soit name, soit id doit être présent.
Utilisation au niveau du contenu
Insérez un composant à une position spécifique — son contenu remplace le use en place. Ici use est un objet unique :
{
"document": {
"content": [
{ "use": { "name": "company-header" } },
{ "h1": "Invoice #$data.invoice.number" },
{ "use": { "name": "line-items-table", "data": { "rows": "$data.lineItems" } } },
{ "use": { "name": "signature-block", "style": "muted" } }
]
}
}
Utilisation au niveau racine
Énumérez les composants à la racine du document pour fusionner leur configuration (mise en page, en-tête, pied de page, styles, polices) et assembler leur contenu. À la racine du document, use est un tableau — les entrées se composent dans l'ordre de la liste, leur contenu placé avant celui du document :
{
"document": {
"use": [
{ "name": "letterhead", "override": true }
],
"content": [
{ "h1": "My Document" }
]
}
}
Un composant de configuration seule (un en-tête avec header/footer/styles et content vide) ne contribue que son cadre. Un composant porteur de contenu contribue aussi son contenu.
Flux de données
Par défaut, un composant hérite du contexte $data complet du parent. Le champ data sur un use scopes un contexte par instance qui est intégrés dans le contenu du composant — exactement comme un use.data du canvas s'intègre dans un symbole :
{ "use": {
"name": "address-block",
"data": {
"name": "$data.recipient.name",
"city": "$data.recipient.city"
}
} }
À l'intérieur du composant, $data.name et $data.city se résolvent à partir du mappage délimité. Les jetons hors de portée passent par la passe de données globales ultérieures du document.
| Scénario | Comportement |
|---|---|
Aucun champ data | Le composant hérite du contexte $data complet du parent |
"data": { "items": "$data.lineItems" } | Le composant voit $data.items mappé à partir de lineItems du parent |
"data": { "name": "$data.approver.name" } | Le composant voit $data.name comme une valeur scalaire |
Cascade de styles
use.style nomme un style qui est estampillé sur les éléments de contenu inclus de niveau supérieur qui ne déclarent aucun style propre — la même cascade qu'un style g/use du canvas. Les blocs d'un composant qui définissent leur propre style le conservent ; le reste hérite du défaut de la section. Une poignée style une section incluse complète sans éditer le composant.
Règles de fusion
Lorsqu'un composant se compose dans un document, sa configuration fusionne avec le parent :
| Propriété | Défaut (override false) | override: true |
|---|---|---|
| Mise en page / En-tête / Pied de page / Métadonnées | L'hôte gagne si défini, sinon hérité | Le composant gagne s'il a défini une valeur |
| Styles / Polices | Ajouté s'il n'est pas déjà défini (l'hôte gagne sur la clé) | Le composant remplace les entrées du même nom |
| Contenu (utilisation au niveau du contenu) | Remplace l'élément use en place | — |
| Contenu (utilisation au niveau racine) | Concaténé avant le contenu du document, dans l'ordre de la liste | — |
La valeur par défaut est host-wins : un document conserve la configuration qu'il déclare. Définissez override: true quand un composant devrait posséder le cadre — par ex. un en-tête qui fournit l'en-tête/pied de page même si l'hôte avait déclaré des espaces réservés.