Skip to content

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

PropertyTypeDefaultDescription
limitnumber10Maximum 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:

  1. Add a Repeater to the canvas.
  2. Attach a data source to the Repeater (click the Data Source button and add a Table Query node pointing to your tasks table).
  3. Set limit to 20.
  4. Inside the Repeater, add child widgets:
    • Heading -- content: { {row.title}}
    • Text -- content: { {row.description}}
    • Badge -- label: { {row.status}}

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 a data-nxs-context attribute 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.fieldName to access the current iteration's data.
  • Nest a Card inside the Repeater to give each item a bordered card appearance.
  • The onClick event 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: flex to control the layout direction (horizontal or vertical) of each repeated item.