我有一个用GWT编写的应用程序。我希望能够提供相同应用程序的子集,以便在移动浏览器中打开网站时使用,并且已经将mgwt视为实现此目的的一种方式。
我期待它工作的方式是我将使用mgwt代码(带有一些逻辑共享)来扩充我现有的GWT应用程序项目,从而产生两个入口点。我的问题是如何管理这个单一的HTML页面?我已经看到了this article中描述的方法,并且想知道这是否适用于mgwt或者是否应该考虑另一种模式?
答案 0 :(得分:1)
我认为你不需要2个入口点。正如kiran所说,你应该重用除视图组件之外的所有代码。如果您使用了GWT Activities and Places模块,那么视图组件应该与其余代码完全分离。
在这种情况下,您可以使用与模块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/resources/com/gwtcx/FormFactor.gwt.xml
在您的IClientFactory中,您将拥有以下内容:
public interface IClientFactory {
IHomeView getHomeView();
ISearchView getSearchView();
...
}
其中IHomeView和ISearchView是桌面和移动版本实现的视图界面。在我的例子中,View实现是实现相关视图接口的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;
}
...
}
通过这种方式,您不需要移动设备和桌面的不同入口点,并且可以共享除视图组件之外的所有代码。
答案 1 :(得分:0)
指向googlecode上的MobileWebApp的链接中的模式是正确的。基本上你在GWT中有UI视图接口,它坚持GWT推荐的MVP模式。然后,您可以根据可用的屏幕分辨率执行UI视图的不同实现。显然,您不希望在桌面和移动设备上显示相同的屏幕布局。因此,您需要针对不同的外形重新设计视图,然后根据设备的外形调用正确的实现。由于您已经拥有gwt应用程序,因此可以使用mgwt为移动设备创建视图并重用已创建的代码。但是你仍然需要使用mgwt为移动设备创建新的视图,它不会是一个直接替代。