Appearance
Repeater
Iterates over data rows from a pipeline and renders its child widgets once for each row. The Repeater is the fundamental widget for displaying lists of data.
Properties
| Property | Type | Default | Description |
|---|---|---|---|
| limit | number | 10 | Maximum number of rows to display. |
Events
onClick-- Fires when a repeated item is clicked. The clicked row's data is available in the action context.
Container
This widget is a container -- drag widgets inside it to define the template that repeats for each row. Every child widget has access to the current row's data via row.fieldName expressions.
Example
Display a list of tasks from a "tasks" table:
- Add a Repeater to the canvas.
- Attach a data source to the Repeater (click the Data Source button and add a Table Query node pointing to your tasks table).
- Set
limitto20. - Inside the Repeater, add child widgets:
- Heading --
content: { {row.title}} - Text --
content: { {row.description}} - Badge --
label: { {row.status}}
- Heading --
The Repeater renders these three widgets for each row returned by the data source, up to the limit.
Automatic Context Forwarding
When a widget inside the Repeater has a backend event (e.g., an onClick that runs a server-side action), the Repeater automatically passes the current row's data as context to that action. This means:
- You do not need to manually create a data source pipeline with "Get Context -> Set Context" on every actionable element inside the Repeater.
- Each
<div class="nxs-repeater-item">wrapper carries adata-nxs-contextattribute with the serialized row JSON. The frontend JS reads this attribute (via.closest('[data-nxs-context]')) and sends the row data to the server when the action fires. - This works for any depth of nesting -- buttons, links, or any widget with a backend event anywhere inside a repeater item will automatically receive the correct row context.
Example: To add a "Delete" button to each repeated item, simply drop a Button widget inside the Repeater, attach a backend onClick action that calls your delete pipeline, and the clicked row's data will be available as context in the action -- no extra configuration needed.
Tips
- The Repeater renders a flat list with no built-in pagination. For paginated layouts, use the Listing Grid widget instead.
- Each child widget can use
row.fieldNameto access the current iteration's data. - Nest a Card inside the Repeater to give each item a bordered card appearance.
- The
onClickevent fires with the clicked row's data, making it easy to build click-to-detail interactions. - Use a Container as the direct child with
display: flexto control the layout direction (horizontal or vertical) of each repeated item.