GWT代码拆分。 Splited文件未加载intime

时间:2013-02-17 10:24:55

标签: gwt split

我有问题。在大型GWT(2.4)-app中,我们使用了gwt-code-splitting。 GWT-compiller为一个小型的js-parts裁剪应用程序。

但是,我想加载一些模块

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:捕获了一个或多个异常,请参阅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:捕获到一个或多个异常,请参阅UmbrellaException中的完整设置#getCauses BDC16B1A93B4190A8C1DD66EEF9838B8.cache.html:1435 (匿名函数)

2 个答案:

答案 0 :(得分:1)

嗯,你知道,它被称为runAsync有一个原因:它是 a - 同步。

答案 1 :(得分:0)

通常我会将此作为MVC的一部分。

Controller检查它所需的模块是否为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();
    }