在我的 GWT 2.5 应用程序中,我有两个入口点。EntryPoint A 是主应用程序,EntryPoint B 提供了我的应用程序的小部件版本。
根据我提供给容器的启动参数,我想启用/禁用 EntryPoint B。我该如何实现?我知道如何在编译期间通过从我的 *.gwt.xml 文件中删除对应的声明来完全禁用 EntryPoint。
在我的 GWT 2.5 应用程序中,我有两个入口点。EntryPoint A 是主应用程序,EntryPoint B 提供了我的应用程序的小部件版本。
根据我提供给容器的启动参数,我想启用/禁用 EntryPoint B。我该如何实现?我知道如何在编译期间通过从我的 *.gwt.xml 文件中删除对应的声明来完全禁用 EntryPoint。
一个 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 加载到浏览器中。
似乎您可以创建两个模块,每个模块都提供不同的入口点。两者都将从通用逻辑模块继承。然后每个都有一个不同的 boostrap JavaScript URL(.nocache.js)。缺点是这些脚本与浏览器完全不同,因此如果您在小部件和完整版本之间切换,则没有缓存优势。
您还可以在入口点方法中进行简单的测试,是否应该执行入口点 - 如果没有,则返回。例如,您可以检查预期的容器元素是否存在于 DOM、URL 或其他任何内容中。如果在单个模块中执行两个入口点,则没有太大问题。
在你的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
也许,最好有一个应用程序拥有一个入口点。结果,您将拥有 2 个具有自己的上下文和访问路径的模块:
还有两个文件:
这些将包括Application.gwt.xml中的常见内容