---
tags: brew-js
---
# Template transformation
## Directives
### `<apply-attribute />`
| App events | DOM events | Other directives | Triggers |
| ---------- | ---------- | ---------------- | -------- |
| `mounted` | - | - | - |
When mounted, apply attributes to all matched elements.
```htmlembedded
<div>
<apply-attribute elements="li" style="color: red"></apply-attribute>
<ul>
<li>This line will be red.</li>
<li>This line will be red.</li>
<li>This line will be red.</li>
</ul>
</div>
```
The above thus becomes:
<table>
<td>
<ul>
<li style="color: red">This line will be red.</li>
<li style="color: red">This line will be red.</li>
<li style="color: red">This line will be red.</li>
</ul>
</td>
</table>
### `apply-template="[name]"`
| App events | DOM events | Other directives | Triggers |
| ------------------------ | ---------- | ---------------- | -------- |
| `mounted`, `statechange` | - | - | - |
It looks for another element that has the attribute `brew-template` with the same attribute value.
Then all attributes and contents are applied. The `<content>` elements in the template serves as placeholders where the original content is inserted.
```htmlembedded
<div brew-template="my-template" class="memo">
<div class="memo-header">
<content for="h1"></content>
</div>
<div class="memo-body">
<content></content>
</div>
</div>
<div id="memo" apply-template="my-template">
<h1>Header</h1>
<p>Paragraph</p>
</div>
```
When the element `#memo` is mounted, it is transformed into:
```htmlembedded
<div id="memo" class="memo" apply-template="my-template">
<div class="memo-header">
<h1>Header</h1>
</div>
<div class="memo-body">
<p>Paragraph</p>
</div>
</div>
```
### `foreach="[expression]"`
| App events | DOM events | Other directives | Triggers |
| ------------------------ | ---------- | ---------------- | ------------- |
| `mounted`, `statechange` | - | - | `statechange` |
Generate sets of child content for each array item. The item can be accessed by the auto-generated `foreach` variable.
```htmlembedded
<ul foreach="[ 1 | 2 | 3 ]">
<li template>Item {{$foreach}}</li>
</ul>
```
will results in
<table>
<td>
<ul>
<li template>Item 1</li>
<li template>Item 2</li>
<li template>Item 3</li>
</ul>
</td>
</table>
If `foreach` references other variables, the child content will be re-built. This is how the TODO app works.