Grid Component
What it does
The fr:grid
component organizes contained controls in a grid of rows and columns. Features:
- configurable number of rows and columns
- optional repetition of its content
- configurable min/max number of iterations
- can repeat over several heterogeneous rows
- built-in icons and menus to add, remove, and move repeated rows
- supports
relevant
andreadonly
MIPs [SINCE Orbeon Forms 4.8]
Appearance
Full repeat appearance
Minimal repeat appearance
[SINCE Orbeon Forms 4.11]
Basic usage
Non-repeated mode
<fr:grid id="note-grid">
<xh:tr>
<xh:td>
<xf:textarea id="note-text-control" bind="note-text-bind">
<xf:label ref="$form-resources/note-text/label"/>
<xf:hint ref="$form-resources/note-text/hint"/>
<xf:help ref="$form-resources/note-text/help"/>
<xf:alert ref="$form-resources/note-text/alert"/>
</xf:textarea>
</xh:td>
</xh:tr>
</fr:grid>
Attributes:
id
: optional grid id. Form Builder always places an id.repeat
: can be optionally set tofalse
NOTE: In the future bind
and ref
should be supported.
Repeated mode
<fr:grid
id="note-grid"
repeat="content"
bind="note-bind"
template="instance('note-template')"
min="0">
<xh:tr>
<xh:td>
<xf:textarea id="note-text-control" bind="note-text-bind">
<xf:label ref="$form-resources/note-text/label"/>
<xf:hint ref="$form-resources/note-text/hint"/>
<xf:help ref="$form-resources/note-text/help"/>
<xf:alert ref="$form-resources/note-text/alert"/>
</xf:textarea>
</xh:td>
</xh:tr>
</fr:grid>
Attributes:
id
: optional grid id.repeat
true
: legacy repeat modecontent
: new repeat mode with an enclosing element [SINCE Orbeon Forms 4.8]
bind
orref
- with
repeat="content"
: single item binding which binds to the enclosing element - with
repeat="true"
: item sequence binding which binds to the repeated elements
- with
template
- XML data template used to insert new data when iterations are inserted
- optional when the grid is readonly
min
andmax
- minimum vs. maximum number of repeat iterations supported
- can be an AVT
- evaluation context
- with
repeat="content"
: context of the binding (bind
orref
) - with
repeat="true"
: context of thefr:grid element
- with
- are checked when the user attempts to add/remove iterations with the UI
remove-constraint
- optional XPath expression
- evaluation context
- context of the iteration item
- if the constraint returns
false()
, the current row cannot be removed
freeze
- optional number of rows at the top which cannot be removed or moved
- this cannot be an AVT
readonly
- force the grid to be readonly when set to
true
- this cannot be an AVT
- force the grid to be readonly when set to
apply-defaults
[SINCE Orbeon Forms 4.11]true
: dynamic initial values (via thexxf:default
MIP) apply to new iterations- missing or `false: dynamic initial values do not apply to new iterations
- can be an AVT
- see also: Evaluation of initial values upon insert
appearance
[SINCE Orbeon Forms 4.11]full
- the default appearance, as with Orbeon Forms 4.10 and earlier
- row menu
- reordering of rows
- insertion of rows at specific points
- removing of specific rows
minimal
- does not show the "+" button at the top left
- does not show the row menu and associated features
- instead just provides "Add another" and "Remove" links at the bottom
Data format
With repeat="content"
:
- An enclosing element is present.
- Nested elements, typically suffixed with
-iteration
, enclose each repetition.
<note>
<note-iteration>
<note-text/>
</note-iteration>
<note-iteration>
<note-text/>
</note-iteration>
</note>
With legacy repeat="true"
:
- No enclosing element is present.
- Elements are repeated at the top-level.
<note>
<note-text/>
</note>
<note>
<note-text/>
</note>
A template instance contains the XML data to insert for a new iteration:
<xf:instance id="note-template">
<note-iteration xmlns="">
<note-text/>
</note-iteration>
</xf:instance>
Relevance and readonly behavior
With repeat="content"
:
- if the bound item is non-relevant, the grid is entirely hidden
- if the bound item is readonly, the grid is entirely readonly and menus and icons don't show
In either case, fr:grid
contains the rows to repeat as xh:tr
. Each xh:tr
contains xh:td
cells as needed.
Events
[SINCE Orbeon Forms 4.11]
The following events are dispatched to the fr:grid
element:
Event name | Description |
---|---|
fr-iteration-added |
Dispatched when the user has just added an iteration |
fr-iteration-removed |
Dispatched when the user has just removed an iteration |
These events are not dispatched if the number of iterations changes by other means, for examle if the data is replaced, or inserts/deletes happen outside of the component.
See also
- Section component
- Form Builder: Repeated Grids
- Example of use outside of Form Runner: gist
- Evaluation of initial values upon insert