Re: Dispatch with delay="0"

A question about the interaction between dispatch/@delay and model-update.

A model update is only done after any outermost action handler is finished.

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">
       <data xmlns="">
    <bind ref="j" calculate="../i+1"/>

    <action ev:event="xforms-ready">
       <setvalue ref="i" value="999"/>
       <dispatch event="go" delay="0" targetid="m"/>

    <action ev:event="go">
       <setvalue ref="k" value="j"/>


On Wed, 24 May 2017 00:21:54 +0200, Erik Bruchez <> 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