我有一个用 GWT 编写的应用程序。当网站在移动浏览器中打开时,我希望能够提供相同应用程序的一个子集,并且一直将 mgwt 作为实现此目的的一种方式。
我期望它工作的方式是,我将使用 mgwt 代码(具有一些逻辑共享)扩充我现有的 GWT 应用程序项目,从而产生两个入口点。我的问题是如何在给定单个 html 页面的情况下管理它?我已经看到了本文中描述的方法,并且想知道这是否适用于 mgwt,或者是否应该考虑另一种模式?
我认为您不需要2个入口点。正如上面 kiran 所说,您应该重用除视图组件之外的所有代码。如果您使用 GWT 活动和地点模块,视图组件应该与其余代码完全分离。
在这种情况下,您可以使用与模块 xml 定义中的正确定义关联的 GWT.create 方法:
//在你的入口点:
private IClientFactory clientFactory = GWT.create(IClientFactory.class);
//在你的模块xml定义中:
<replace-with class="com.vv.xui.client.DesktopClientFactory">
<when-type-is class="com.vv.xui.client.IClientFactory" />
<when-property-is name="formfactor" value="desktop"/>
</replace-with>
<replace-with class="com.vv.xui.client.MobileClientFactory">
<when-type-is class="com.vv.xui.client.IClientFactory" />
<when-property-is name="formfactor" value="mobile"/>
</replace-with>
可以在此示例中定义 form formfactor 属性: https ://code.google.com/p/gwt-cx/source/browse/trunk/gwtcx/gwtcx-core/gwtcx-core-client/src/main/资源/com/gwtcx/FormFactor.gwt.xml
在您的 IClientFactory 中,您将拥有如下内容:
public interface IClientFactory {
IHomeView getHomeView();
ISearchView getSearchView();
...
}
其中 IHomeView 和 ISearchView 是桌面版和移动版实现的视图界面。在我的例子中,视图实现是实现相关视图接口的 UiBinder 组件。
在您的 DesktopClientFactory 中,您将拥有如下内容:
public class DesktopClientFactory implements IClientFactory {
private static final ISearchView searchView = new com.vv.xui.client.view.desktop.SearchView.SearchView();
@Override
public ISearchView getSearchView() {
return searchView;
}
...
}
通过这种方式,您不需要移动和桌面的不同入口点,并且可以共享除视图组件之外的所有代码。
指向 googlecode 上 MobileWebApp 的链接中的模式是正确的。基本上,您在 GWT 中有 UI 视图界面,这些界面遵循 GWT 上推荐的 MVP 模式。然后,您可以根据可用的屏幕分辨率对 UI 视图进行不同的实现。显然,您不希望桌面和移动设备上的屏幕布局相同。因此,您需要针对不同的外形尺寸重新设计视图,然后根据设备的外形尺寸调用正确的实现。由于您已经有一个 gwt 应用程序,您可以使用 mgwt 创建移动视图并重用您已经创建的代码。但是您仍然必须使用 mgwt 为移动设备创建新视图,它不会是一个直接的替换。