1

在我的 GWT 2.5 应用程序中,我有两个入口点。EntryPoint A 是主应用程序,EntryPoint B 提供了我的应用程序的小部件版本。

根据我提供给容器的启动参数,我想启用/禁用 EntryPoint B。我该如何实现?我知道如何在编译期间通过从我的 *.gwt.xml 文件中删除对应的声明来完全禁用 EntryPoint。

4

4 回答 4

2

一个 GWT 应用程序只能有一个入口点。因此,您可以创建 2 个容器,例如 ContainerA 和 ContainerB,而不是 2 个应用程序。在 Entrypoint 的 onModuleLoad 方法中,您执行 RPC 调用以获取 Container 决定参数。并根据您所做的参数

public void onModuleLoad()
{ 
      getRPCService.getStartUpParameter( AsyncCallBack<Parameter>
      { 
             public void onFailure()
             {
             }

             public void onSuccess(Parameter parameter)
             {
                   if( ContainerARequired( parameter ) )
                   {
                          RoolLayoutPanel.get().add( ContanerA )
                   }
                   else
                   {
                          RoolLayoutPanel.get().add( ContanerB )
                   }
             }
      });
}

使用这种方法,您的 js 大小会增加。因此,使用代码拆分和运行异步概念将大 js 文件拆分为较小的文件。有了这个,您可以只将所需的 js 加载到浏览器中。

于 2013-02-26T14:08:44.727 回答
2

似乎您可以创建两个模块,每个模块都提供不同的入口点。两者都将从通用逻辑模块继承。然后每个都有一个不同的 boostrap JavaScript URL(.nocache.js)。缺点是这些脚本与浏览器完全不同,因此如果您在小部件和完整版本之间切换,则没有缓存优势。

您还可以在入口点方法中进行简单的测试,是否应该执行入口点 - 如果没有,则返回。例如,您可以检查预期的容器元素是否存在于 DOM、URL 或其他任何内容中。如果在单个模块中执行两个入口点,则没有太大问题。

于 2013-02-26T14:09:30.887 回答
0

在你的gwt.xml

<define-property name="disableEntryPoint" values="true,false" />

<!-- Provide a default -->
<set-property name="alternateFeatures" value="false" />


<replace-with class="com.example.EntryPoint1">
  <when-type-is class="com.example.EntryPoint2" />
  <when-property-is name="disableEntryPoint" value="false" />
</replace-with>

请参阅:http ://code.google.com/p/google-web-toolkit/wiki/ConditionalProperties

于 2013-02-26T13:53:33.663 回答
0

也许,最好有一个应用程序拥有一个入口点。结果,您将拥有 2 个具有自己的上下文和访问路径的模块:

  • /入口A
  • /入口B

还有两个文件:

  • 入口A.gwt.xml
  • 入口B.gwt.xml

这些将包括Application.gwt.xml中的常见内容

于 2013-02-28T08:54:37.807 回答