Skip to main content

Generates a reference to a part of a component.

This is used to mark parts of a component for JavaScript interaction or styling. It generates the element id (using a deterministic formula based on component name, root ID and part name) along with data-scope and data-part attributes.

Example

<div {ui:ref(name: 'button')}">Click me</div>

This will generate:

<div id="my-component:«uniqueRootId»:button" data-scope="my-component" data-part="button">Click me</div>

For multi-instance parts (e.g. accordion items, tab panels) pass a value: discriminator:

<div {ui:ref(name: 'item', value: value)}">...</div>

You can also pass additional data attributes:

<div {ui:ref(name: 'button', data: { action: 'submit' })}">Click me</div>

This will generate:

<div id="..." data-scope="my-component" data-part="button" data-action="submit">Click me</div>

A component's slot content (the markup a consumer writes between its opening/closing tags) is always evaluated against the calling rendering context, not the component's own internal one - so a bare ui:ref written directly inside such slot content doesn't, by default, know which component (or rootId) it belongs to, and throws. Pass context to attach it explicitly to a named ancestor component instead (resolved the same way ui:template's own context argument is - it threads correctly through slot-content nesting, unlike the ambient component/context variables this ViewHelper otherwise reads):

<ui:combobox.root>
  <ui:combobox.content>
    <div>
      <span {ui:ref(name: 'statusText', context: 'combobox')}>Loading…</span>
    </div>
  </ui:combobox.content>
</ui:combobox.root>

Use ui:template instead when the content's real data doesn't exist yet at server-render time and needs cloning client-side per instance (e.g. async search results) - context here is for hand-authored elements that render immediately, once, and never get cloned.

Arguments

Name Type Description Required Default
name string Name of the ref Yes -
asArray boolean If true, the ref will be rendered as an array instead of a string of data-attributes No false
data array Additional data attributes to include in the ref. Associative array with key-value pairs. Each key is prefixed with "data-". No []
value string|BackedEnum|UnitEnum|null|array Optional discriminator for multi-instance parts (e.g. accordion items, tab triggers). No -
context string camelCase base name of an ancestor component to attach this ref to explicitly (e.g. "fileUpload"), for hand-authored elements living in another component's slot content rather than a component's own template body. When omitted, uses whichever component is already ambiently active (the normal case for a component's own template). No ''