29
edits
(Just needs to be implemented :)) |
(Revised thoughts) |
||
Line 38: | Line 38: | ||
# should any event handling in the model defer concurrent events? | # should any event handling in the model defer concurrent events? | ||
# how about "rogue" events, coming from script, etc.? | # how about "rogue" events, coming from script, etc.? | ||
# | # also defer rebuild? | ||
"Instance data changes performed by a set of actions do not result in | |||
immediate computation dependency rebuilding, recalculation, revalidate and | |||
form control refreshing until the termination of the outermost action handler" | |||
[http://www.w3.org/TR/2006/REC-xforms-20060314/slice10.html#action-action Deferred Actions in the Spec] | |||
Based on that, I believe: | |||
# we should defer rebuild too | |||
# both "deferred events from action" and value-changes should be deferred | |||
== The Event-Dispatch Queue == | == The Event-Dispatch Queue == | ||
The conclusion of the above is that the | The conclusion of the above is that the _model_ should | ||
# be asked to perform requests for controls directly, not through events | # be asked to perform requests for controls directly, not through events | ||
# be responsible for dispatching events on itself | # be responsible for dispatching events on itself | ||
Line 54: | Line 62: | ||
The nsIModelPrivateElement should expose: | The nsIModelPrivateElement should expose: | ||
<pre> | <pre> | ||
requestRecalculate( | requestRebuild(); | ||
requestRevalidate( | requestRecalculate(); | ||
requestRefresh( | requestRevalidate(); | ||
requestRefresh(); | |||
</pre> | </pre> | ||
On a call to any of these functions the following should happen | On a call to any of these functions the following should happen | ||
<pre> | <pre> | ||
request...() { | |||
if (gDefer) { | if (gDefer) { | ||
eventQ.pushBack( | eventQ.pushBack(the_request); | ||
return; | return; | ||
} | } | ||
gDefer = true; | gDefer = true; | ||
dispatchEventFor(the_request); | |||
// Empty the queue | |||
req = eventQ.popFront(); | |||
while (req) { | |||
dispatchEventFor(req); | |||
} | } | ||
gDefer = false; | gDefer = false; | ||
Line 79: | Line 88: | ||
</pre> | </pre> | ||
<recalculate> and its friends and scripts call the functions directly (exposed in nsIXFormsModelElement), which bypasses both events and the queue. | |||
[[User:Beaufour|Beaufour]] 02:10, 16 May 2006 (PDT) | [[User:Beaufour|Beaufour]] 02:10, 16 May 2006 (PDT) |
edits