我有问题。在大型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 (匿名函数)
答案 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();
}