GWT RunAsync - 发布模式下的奇怪行为

时间:2011-04-13 08:27:45

标签: gwt asynchronous gwt-mvp

正如本问题GWT - Where should i use code splitting while using places/activities/mappers?中所建议的那样,我创建了一个ActivityProxy来嵌套我的活动。

我的实现基于http://code.google.com/p/google-web-toolkit/issues/detail?id=5129(第6条评论),只做了一次修改:我在调用GWT.RunAsync之前添加了对提供程序的检查:

if (provider != null)
{
    GWT.runAsync(new RunAsyncCallback()
    {
        @Override
        public void onFailure(Throwable reason)
        {
            // ...
        }

        @Override
        public void onSuccess()
        {
            ActivityProxy.this.nestedActivity = provider.create();
            //...
        }
    });
}

但由于某些原因,这在发布模式下不起作用:onFailure方法永远不会被调用,但我的活动在我第一次使用时从不显示。如果我重装这个地方,一切都显示得很好。

然后我意识到执行以下操作可以解决问题:

GWT.runAsync(new RunAsyncCallback()
{
    @Override
    public void onFailure(Throwable reason)
    {
        // ...
    }

    @Override
    public void onSuccess()
    {
        if (provider != null)
        {
            ActivityProxy.this.nestedActivity = provider.create();
            //...
        }
    }
});

所以,即使我不明白它为什么会起作用,我也开始将它用于我的所有活动。

当我决定为ActivityProxy使用生成器时,我又遇到了问题(为了避免为每个Activity编写提供程序)。 synthax变为GWT.create(ActivityProxy).wrap(MyActivity.class);

基本上,生成的代码如下所示:

if (clazz.getName() == "FooClass")
{
    nestedActivity = new FooClass(); //inside a RunAsync
}
if (clazz.getName() == "BarClass")
{
    nestedActivity = new BarClass(); //inside a RunAsync
}

出现同样的问题:我的应用在第一次使用时无法显示我的活动。

这么简单的问题:“为什么?”

0 个答案:

没有答案