- From: Steven Pemberton <steven.pemberton@cwi.nl>
- Date: Tue, 30 May 2017 15:37:36 +0200
- To: "public-xformsusers@w3.org" <public-xformsusers@w3.org>, "Erik Bruchez" <erik@bruchez.org>
- Message-ID: <op.y01z4yz0smjzpq@steven-xps>
A question about the interaction between dispatch/@delay and model-update.
A model update is only done after any outermost action handler is finished.
https://www.w3.org/community/xformsusers/wiki/XForms_2.0#Updates
So, does a dispatch with no delay leave the current handler running?
Does a dispatch with delay="0" mean that the current handler finishes
before the dispatched event gets dispatched?
In other words, with the following, does k end up with 2 or 1000? And does
it make a difference if I delete the 'delay="0"'?
<model id="m">
<instance>
<data xmlns="">
<i>1</i>
<j>2</j>
<k>0</k>
</data>
</instance>
<bind ref="j" calculate="../i+1"/>
<action ev:event="xforms-ready">
<setvalue ref="i" value="999"/>
<dispatch event="go" delay="0" targetid="m"/>
</action>
<action ev:event="go">
<setvalue ref="k" value="j"/>
</action>
</model>
Steven
On Wed, 24 May 2017 00:21:54 +0200, Erik Bruchez <erik@bruchez.org> wrote:
> All,
>
>> The spec says:
>
>> "If the delay is zero, or does not conform to xs:nonNegativeInteger,
>> then the event is dispatched immediately"
>
>> I assume that it means dispatched synchronously. This means that there
>> is a difference of synchronicity >between:
>
>> <xf:dispatch name="foo" targetid="my-model" delay="0"/>
>
>> and:
>
>> <xf:dispatch name="foo" targetid="my-model" delay="1"/>
>
>> It would be nice to be able to add an event to the event queue
>> immediately. Using `delay="1"` is close but not >ideal.
>
>> The obvious way of doing that would be to change the spec and say that
>> if `delay` is present and contains a >number, the event is always added
>> to the queue. So you always get asynchronous dispatch with a numeric
>> >`delay`.
>
>> Now, this causes a problem if you want to have a single action which,
>> via an AVT, allows for both asynchronous >dispatch and asynchronous
>> dispatch. A special value, such as `delay="none"` could possibly be
>> used.
>
>> <xf:dispatch name="foo" targetid="my-model" delay="none"/>
>
>> Or an empty value:
>
>> <xf:dispatch name="foo" targetid="my-model" delay=""/>
>
>> Also, a case could be made that if `delay` evaluates to something which
>> is not a number and not a value >indicating synchronous dispatch, then
>> the event dispatch shouldn't take place (or an error could be raised):
>
>> <xf:dispatch name="foo" targetid="my-model" delay="bar"/>
>
>> Thoughts?
>
>> -Erik
Received on Tuesday, 30 May 2017 13:38:14 UTC