On 12 nov, 14:52, Damien Picard <[email protected]> wrote:
> Hi,
>
> I'm trying to understand the DeferredCommand.addPause function (with
> gwt-2-ms1).
> I wrote this sample :
>
>         Button bouton = new Button("attente");
>         bouton.addClickHandler(new ClickHandler(){
>             @Override
>             public void onClick(ClickEvent event) {
>                 DeferredCommand.addCommand(new Command(){
>                     @Override
>                     public void execute() {
>                         GWT.log("Deferred command 1", null);
>                     }
>                 });
>                 DeferredCommand.addPause();
>                 DeferredCommand.addCommand(new Command(){
>                     @Override
>                     public void execute() {
>                         GWT.log("Deferred command 2", null);
>                     }
>                 });
>
>                 GWT.log("Event ends", null);
>             }
>         });
>         RootPanel.get("sendButtonContainer").add(bouton);
>
> In my mind, the pause added between the two deferred command would stop
> executing the queue until another event is handled. Then, a log like that
> should be :
> {First clic on button}
> [INFO] Event ends
> [INFO] Deferred command 1
> {second clic and next ones}
> [INFO] Event ends
> [INFO] Deferred command 2
> [INFO] Deferred command 1
>
> but I get this log :
> [INFO] Event ends
> [INFO] Deferred command 1
> [INFO] Deferred command 2
>
> So, I haven't understand exactly what is a pause. Could somebody explain me
> where I'm wrong ?

addPause semantics actually is "let the browser do its things (such as
refreshing the display or handling events)".

DeferredCommand's are batched together and executed in a single run,
until the next "pause".
If a run of commands takes long enough so that you can "generate
events" (e.g. click), then those click events are likely to be
processed during the "pause": try doing some expensive work in the
first deferred command (such as creating and appending 1000 DOM
elements to the document; you can try also with a Window.alert()) and
generate a second click event during this time (before dismissing the
alert, if you shows Window.alert) and you should see:
[INFO] Event ends
[INFO] Deferred command 1
[INFO] Event ends
[INFO] Deferred command 2
[INFO] Deferred command 1
[INFO] Deferred command 2
Similarly, if you update the display (e.g. show/hide widgets or text),
it'll only be refreshed on screen during the "pause": try showing/
hiding a widget in the first command and then show an alert
(Window.alert), and show an alert in the second command, you log
should be (annotated):
[INFO] Event ends
[INFO] Deferred command 1
// alert, notice that the display hasn't changed
[INFO] Deferred command 2
// alert, and now the display has changed

--

You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=.


Reply via email to