在我的GWT 2.5应用程序中,我有两个入口点。 EntryPoint A是主应用程序,EntryPoint B提供了我的应用程序的小部件版本。
根据我提供给容器的启动参数,我想启用/禁用EntryPoint B.我怎样才能实现?我知道如何通过从我的* .gwt.xml文件中删除对应声明来在编译期间完全禁用EntryPoint。
答案 0 :(得分:2)
GWT应用程序只能有一个入口点。 因此,您可以创建2个容器,而不是2个容器,即ContainerA和ContainerB。在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文件拆分为较小的文件。有了这个,您只能将所需的j加载到浏览器中。
答案 1 :(得分:2)
似乎你可以创建两个模块,每个模块提供一个不同的入口点。两者都将继承公共逻辑模块。然后每个都有一个不同的boostrap JavaScript URL(.nocache.js)。缺点是那些脚本与浏览器完全不同,因此如果在小部件和完整版本之间切换,则没有缓存优势。
您也可以在入口点方法中进行简单测试是否应该执行入口点 - 如果没有则返回。例如,您可以检查DOM,URL或其他内容中是否存在预期的容器元素。如果在单个模块中执行两个入口点,则没有太多问题。
答案 2 :(得分: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
答案 3 :(得分:0)
还有两个文件:
这些将包含来自 Application.gwt.xml
的常见内容