Repeats and events

All,

I have a question about repeats and events, which I am not sure is
addressed in the spec (at least not explicitly).

In XForms 1.1, there is the concept of "repeat objects" which
represent runtime repeat iterations. XForms1.1 states:

"A repeat object is an implicitly generated group element that
contains the set of run-time objects generated to represent the repeat
template content for a single repeat item of the repeat collection.
These run-time objects are form controls, XForms actions and other
host language elements that correspond to elements in the repeat
template."

Less formally, XForms 1.1 also mentions the "repeat container"
control, which manages the "repeat collection".

Now, let's say we have this repeat with a nested event handler:

<xforms:repeat ref="value" id="my-repeat">
    <xforms:action ev:event="my-event"/>
</xforms:repeat>

And I dispatch, from outside the repeat, an event using the repeat id:

<xforms:dispatch targetid="my-repeat" name="my-event"/>

The three-pronged question is:

1. Does the handler run, or not?
2. If so, does it run once, or once per repeat iteration?
3. If it runs only once, in which XPath context does the action run?

There seems to be 2 basic options:

Option A. If you assume that the id corresponds to the repeat
container, then it should not respond to the event, as the actual
markup would look like:

<xforms:repeat ref="value" id="my-repeat">
    <xforms:group ref=".">
        <xforms:action ev:event="my-event"/>
    </xforms:group>
    ...
</xforms:repeat>

Option B. However, if the id corresponds to the repeat iteration, then
it should respond to the event, as if you had written:

<xforms:repeat ref="value">
    <xforms:group id="my-repeat" ref=".">
        <xforms:action ev:event="my-event"/>
    </xforms:group>
    ...
</xforms:repeat>

Further, in the latter case, the event handler would run in the XPath
context of the iteration with the current repeat index.

There are benefits and drawbacks to each option. Option A makes sense
once you explain to the programmer that even though he can't see it,
there is a virtual <group> in between. However, this doesn't allow
placing within xforms:repeat a handler that responds directly to an
event directed to that repeat by id.

Option B makes sense in that if you just look at the markup, it might
be more intuitive that a handler responds to an event directed to that
repeat by id. On the other hand, it makes making a distinction between
events targeting a repeat iteration vs. the repeat as a whole more
difficult.

Is there an option C?

-Erik

Received on Monday, 12 December 2011 23:49:15 UTC