0

私は問題があります。大規模な GWT(2.4) アプリでは、gwt-code-splitting の使用をやめました。小さな js-parts 用の GWT コンパイラ トリミング アプリ。

しかし、いくつかのモジュールをロードしたい場合

final Module form = ModuleFactory.getInstance().getModule(modumesName);

/ * /

private Module module = null;

public Module getModule(String moduleName){
 if (moduleName.equals("M1")) {
 GWT.runAsync(new RunAsyncCallback() {      
        @Override
        public void onSuccess() {
            module = GWT.create(M1.class);
        }

        @Override
        public void onFailure(Throwable arg0) {
            Window.alert("not load M1");
        }
    });
  }
return module;
}

M1拡張モジュール

ウィジェットM1の作成を初めて呼び出すと、jsエラーが発生しました

「キャッチされていない com.google.gwt.event.shared.UmbrellaException: 1 つ以上の例外がキャッチされました。UmbrellaException#getCauses で完全なセットを参照してください」

しかし、別の機会に、モジュール M1 を入手しました。私が見た開発ツールでは、その分割部分がロードされました。

public class CreateModuleWidget extends Composite{
     private static final Binder binder = GWT.create(Binder.class);
     interface Binder extends UiBinder<Widget, CreateModuleWidget> {}

     public CreateModuleWidget() {
           /*initparams**/ 
     }

     @UiHandler("createButt")
     void onCreateClick(ClickEvent event) {
          String modumesName = "M1";
          final WidgetDialog dialog = new WidgetDialog(moduleName, true);
          final Module form = ModuleFactory.getInstance().getModule(modumesName);
          dialog.setDialogWidget(form);
          dialog.show();
     }
}

public class ModuleFactory{
    private Module form = null;

private static ModuleFactory instance = null;

public static ModuleFactory getInstance(){
    if(instance == null){
        instance = new ModuleFactory();
    }
    return instance;
}
    public Module getModule(String moduleName){
        if (moduleName.equals("M1")) {
           GWT.runAsync(new RunAsyncCallback() {        
        @Override
        public void onSuccess() {
            module = GWT.create(M1.class);
        }

        @Override
        public void onFailure(Throwable arg0) {
            Window.alert("not load M1");
        }
    });
          }
    return module;
   }
 }

キャッチされていない com.google.gwt.event.shared.UmbrellaException: 1 つ以上の例外がキャッチされました。UmbrellaException#getCauses BDC16B1A93B4190A8C1DD66EEF9838B8.cache.html:1435 で完全なセットを参照してください (匿名関数)

4

2 に答える 2

1

ええと、あなたが知っている、それrunAsyncは理由のために呼ばれます:それ同期です。

于 2013-02-17T17:48:10.487 に答える
0

通常、これはMVCの一部として行います。

コントローラは、必要なモジュールがnullであるかどうかを確認し、nullである場合は、それをロードして、必要なコードを取得した後にビューに進みます。

Module module;



   if (module==null){

          //You could display a waiting message in a dialog

          GWT.runAsync(new RunAsyncCallback() {  
           ...
            public void onSuccess() {
                  module = GWT.create(M1.class);
                  showXYZView();
             }
     });

    }else{
          showXYZView();
    }
于 2013-02-18T04:41:45.247 に答える