2009-12-03 17 views
0

J'ai une application GWT qui utilise fortement les appels RPC. Je voudrais afficher une icône de fileur chaque fois qu'un appel est en cours. Il est assez facile d'afficher l'icône, mais je veux le faire de façon transparente dans un endroit, donc je ne dois pas explicitement cacher et montrer l'icône pour chaque appel.Est-il possible d'afficher de façon transparente un ajax spinner pour chaque appel RTC GWT?

Je suppose que je cherche quelque chose de similaire aux événements ajaxStart et ajaxStop de jQuery.

Est-ce que quelqu'un a déjà fait quelque chose comme ça?

Vive Tin

Répondre

2

Pourquoi ne vous met pas en œuvre ce comportement dans une mise en œuvre concrète de la sous-classe AsyncCallback et tous les AsyncCallbacks de celui-ci. Alternativement, vous pouvez utiliser un motif décorateur où vous utilisez un AsyncCallback régulier et le décorer avec un autre qui affiche/cache le popup. Alternativement, si vous utilisez un modèle de commande, vous pouvez simplement ajouter ces événements à votre implémentation de modèle de commande et vous pouvez enregistrer un gestionnaire qui affiche/cache une fenêtre contextuelle chaque fois qu'une demande est envoyée/reçue.

+0

Je pense que le modèle décorateur est la meilleure façon de mettre en œuvre cela. Mais je voudrais voir cela comme une chose standard fournie par GWT dans une version ultérieure. – sbidwai

+0

Je suppose que j'aurais besoin des deux. Une classe de base AsyncCallback qui gère l'arrêt du spinner ainsi qu'une classe décorateur pour chaque interface asynchrone. Le problème est, j'ai beaucoup d'interfaces asynchrones différentes et ce serait un gâchis d'essayer de les emballer tous séparément. Des idées sur comment je pourrais le faire génériquement? En java standard, AOP résoudrait ce genre de problème mais je ne suis pas sûr qu'il y ait un équivalent GWT. – triggerNZ

1

En réponse aux commentaires qui suggèrent un décorateur ne suffit pas.

abstract class AbstractAsyncCallback <T> implements AsyncCallaback <T> 
{ 
public AbstractAsyncCallback() 
{ 
    Foo.showIcon(); 
} 

@Override public void success (T t) 
{ 
    doSuccess(t); 
    Foo.hideIcon(); 
} 

@Override public void failure() 
{ 
    doFailure(); 
    Foo.hideIcon(); 
} 

public abstract void doSuccess (T t); 

public abstract void doFailure (T t); 
};