如何集中管理 GWT 异步 RPC 调用的“加载”图标?我正在寻找一种让每个异步调用自动启动计时器的方法。当计时器触发时,如果 RPC 尚未完成,则应显示“加载”图标。当 RPC 完成时(或者onSuccess()
或onFailure()
)加载图标应该被移除。
为每次调用手动执行此操作很乏味,实际上很容易出错并给用户留下卡住的 UI。
发电机可以用来做这个吗?只是要清楚-我不是在寻找显示对话框或图标的代码;我正在寻找一种方法来集中管理此类对话框/图标。
如何集中管理 GWT 异步 RPC 调用的“加载”图标?我正在寻找一种让每个异步调用自动启动计时器的方法。当计时器触发时,如果 RPC 尚未完成,则应显示“加载”图标。当 RPC 完成时(或者onSuccess()
或onFailure()
)加载图标应该被移除。
为每次调用手动执行此操作很乏味,实际上很容易出错并给用户留下卡住的 UI。
发电机可以用来做这个吗?只是要清楚-我不是在寻找显示对话框或图标的代码;我正在寻找一种方法来集中管理此类对话框/图标。
也许我以更简单的方式看待它。但是我们在我们的应用程序中有类似的行为,我们只是使用装饰器模式来实现它。装饰器负责显示正在加载的 UI(在我们的例子中它会立即显示),并在返回时确保再次删除 UI。
我们的调用看起来有点像这样:
rpc.dosomething( params, Modality.appModal( new AsyncCallback<String>() {
public void onSuccess( String pValues ) {
... handle success ...
}
public void onFailure( Throwable pCause) {
... handle failure ....
}
}));
Modality.appModal 返回一个执行 UI 部分的 AsyncCallback,并在成功或失败后分派到调用中作为参数给出的 AsyncCallback。
是否值得进一步使用代码生成器?它实现一次,随处使用,无需进一步思考。
大卫
我通过为 ajax 调用创建一个 util 类解决了这个问题。这个类包含一个loadingIndicator 和一个callstaack。loadingIndicator是将显示消息的PopupPanel 。调用堆栈是一个静态列表,其中包含所有需要加载指示器的实际AsyncCallback对象。当回调发生(成功或错误)时,回调将从列表中删除。仅当列表中没有剩余回调时,加载指示器才会隐藏。
public class Ajax {
private static final PopupPanel loadingIndicator = WidgetFactory.createLoadingPopup();
private static final List<AsyncCallback<?>> callstack = new ArrayList<AsyncCallback<?>>();
public static <T> AsyncCallback<T> call(final AsyncCallback<T> callback) {
if(!loadingIndicator.isShowing()){
loadingIndicator.center();
}
callstack.add(callback);
return new AsyncCallback<T>() {
@Override
public void onFailure(Throwable caught) {
handleReturn();
callback.onFailure(caught);
}
@Override
public void onSuccess(T result) {
handleReturn();
callback.onSuccess(result);
}
private void handleReturn(){
callstack.remove(callback);
if(callstack.size() < 1) {
loadingIndicator.hide();
}
}
};
}
}
然后我将它用于需要像这样的加载指示器的evervry RPC调用:
myService.myMethod(Ajax.call(new AsyncCallback<MyReturnType>() {
@Override
public void onFailure(Throwable caught) { ... }
@Override
public void onSuccess(MyReturnType result) { ... }
}));
您可以在这里找到一些答案:调用异步函数时的自动“加载”指示器。
我同意此页面上的其他人的观点,即不值得为此使用代码生成器。