将loadingMessage代码放在(GWTP)的prepareFromRequest方法中是最佳做法吗?

时间:2014-01-23 08:02:34

标签: google-chrome gwt gwtp

我想在页面加载时检查数据。我还想在检查数据时放置加载指示器弹出窗口,以便用户知道该页面正在加载数据。

看看这段代码:

String item="";
@Override
public void prepareFromRequest(PlaceRequest request){
         super.prepareFromRequest(request);
         item=request.getParameter("item", "");
         addToPopupSlot(loadingPresenter);
         GetData action=new GetData(item);
         dispatchAsync.execute(action, getDataCallback);
}
private AsyncCallback<GetDataResult> getDataCallback=new AsyncCallback<GetDataResult>(){
        @Override
        public void onFailure(Throwable caught) {
            // TODO Auto-generated method stub
            loadingPresenter.hide();
        }

        @Override
        public void onSuccess(GetDataResult result) {
            // TODO Auto-generated method stub
            loadingPresenter.hide();
                    //code to show data here
        }
}

好的,这段代码在IE和Firefox中运行良好,但在Chrome中不行。那就是:

在Chrome中,刷新页面后,虽然所有数据都已正确显示,但指示器并未隐藏。在IE&amp; Firefox指标被正确隐藏。

我认为Chrome有问题,他们无法调用loadingPresenter.hide();

我该怎么办?我不认为我应该删除loadingPresenter cos用户单击按钮时调用的getData方法,所以我需要它来指示数据正在加载。但如果我使用loadingPresenter,那么我无法在Chrome中运行。

那我该怎么办?

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,只是将callingMethod放在onReset中,然后它会很好cos的prepareFromRequest被调用得太早,以至于其他一些小部件还没有被绑定。导致问题的原因。这应该适用于所有浏览器。

String item="";
@Override
public void prepareFromRequest(PlaceRequest request){
         super.prepareFromRequest(request);
         item=request.getParameter("item", "");

}

@Override
public voi onReset{
         super.onReset();
         addToPopupSlot(loadingPresenter);
         GetData action=new GetData(item);
         dispatchAsync.execute(action, getDataCallback);
}