1

我有一个用 GWT 编写的应用程序。当网站在移动浏览器中打开时,我希望能够提供相同应用程序的一个子集,并且一直将 mgwt 作为实现此目的的一种方式。

我期望它工作的方式是,我将使用 mgwt 代码(具有一些逻辑共享)扩充我现有的 GWT 应用程序项目,从而产生两个入口点。我的问题是如何在给定单个 html 页面的情况下管理它?我已经看到了本文中描述的方法,并且想知道这是否适用于 mgwt,或者是否应该考虑另一种模式?

4

2 回答 2

1

我认为您不需要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;
    }
...
}

通过这种方式,您不需要移动和桌面的不同入口点,并且可以共享除视图组件之外的所有代码。

于 2014-04-24T07:47:44.790 回答
0

指向 googlecode 上 MobileWebApp 的链接中的模式是正确的。基本上,您在 GWT 中有 UI 视图界面,​​这些界面遵循 GWT 上推荐的 MVP 模式。然后,您可以根据可用的屏幕分辨率对 UI 视图进行不同的实现。显然,您不希望桌面和移动设备上的屏幕布局相同。因此,您需要针对不同的外形尺寸重新设计视图,然后根据设备的外形尺寸调用正确的实现。由于您已经有一个 gwt 应用程序,您可以使用 mgwt 创建移动视图并重用您已经创建的代码。但是您仍然必须使用 mgwt 为移动设备创建新视图,它不会是一个直接的替换。

于 2014-04-14T10:44:14.793 回答