ACTION-1854 Nick van den Bleeken to describe initialization value use cases and ask Erik Bruchez to do the same


I just read today's minutes on this [1].

Our implementation has an extension MIP called @xxforms:default. [2]

The behavior of this MIP is to set an initial value into a node. It
does *not* create new nodes if they are missing.

Its behavior is exactly the same as @calculate, except that it runs
only once during the first xforms-recalculate that occurs
(xforms:reset might reset that "first" flag as well, but we don't
implement this).

Note that @xxforms:default does not really act as a default value in
the sense of setting a value if the value is missing (blank). Instead
it sets an *initial* default value only. We have been pondering
renaming it to @xxforms:initial (or something else) instead.

In addition, we have an extension attribute, @xxforms:defaults, on the
xforms:recalculate action, which allows running forcing the evaluation
of the @xxforms:default expressions, which otherwise will not run upon
subsequent xforms-recalculate.

The implementation of @xxforms:default and @xxforms:defaults is very
simple as it's very similar to what happens with @calculate.

As far as use cases, a simple one is setting an initial date:

  <xforms:bind ref="start-date" xxforms:default="current-date()"/>

When the user opens the form, start-date contains today's date. The
user can then change that default. (This is why the MIP is called

You would think that an alternative would be to write:

  <xforms:bind ref="start-date" calculate="if (normalize-space() = '')
then current-date() else ."/>

But then the behavior would be different: if the user clears the date,
the calculate will immediately replace the blank value with today's
date, which is usually not what you want.



Received on Wednesday, 11 January 2012 21:32:19 UTC