使用GXT时大量的GWT排列

时间:2013-10-20 19:10:47

标签: gwt war

通过编译项目,我有多种排列方式。 如果我设置选项:

<set-property name="user.agent" value="gecko1_8" />

我得到:编译1008个排列

如果我设置:

<set-property name="locale" value="de"/>
<set-property name="user.agent" value="gecko1_8" />

我得到:编译36个排列

这是完整的.gwt.xml

<!-- Inherit the core Web Toolkit stuff. -->
<inherits name='com.google.gwt.user.User' />

<!-- We need the JUnit module in the main module, -->
<!-- otherwise eclipse complains (Google plugin bug?) -->
<inherits name='com.google.gwt.junit.JUnit' />

   <!-- GXT Theme -->
<inherits name='com.sencha.gxt.theme.gray.Gray' />

<!-- caneldar -->
<inherits name='com.bradrydzewski.gwt.calendar.Calendar' />
<inherits name='com.bradrydzewski.gwt.calendar.theme.google.Google' />
<inherits name='com.allen_sauer.gwt.dnd.gwt-dnd' />

<!-- Other module inherits -->
<inherits name="com.google.gwt.json.JSON" />
<inherits name='com.google.gwt.visualization.Visualization' />
<inherits name='com.chap.links.Timeline' />

<!-- Locale -->
<inherits name="com.google.gwt.i18n.I18N"/>
<set-property name="locale" value="de"/>
<set-property name="user.agent" value="gecko1_8" />

什么可能导致大量排列?

1 个答案:

答案 0 :(得分:12)

看起来你正在使用GXT(来自Gray inherits语句),但实际上并没有继承GXT本身(setup.txt中的第三步)。这不一定是的事情,但是避免使用该语句意味着您正在跳过一些限制可能的排列数量的设置。在Gray行之前添加此内容:

<inherits name='com.sencha.gxt.ui.GXT'/>

然后,除了user.agent = gecko1_8之外,添加此内容(或者除此之外)以限制GXT排列(更多内容见下文):

<set-property name="gxt.user.agent" value="gecko1_9" />

(请注意,我们引用Gecko 1.9而不是1.8,因为1.8中至少有一个错误,我们有一个解决方法,因为1.9中需要。)


为什么GXT会添加其他属性,而不是使用user.agent

事实证明user.agent无法轻松扩展 - fallback系统对现有的CssResource声明没有任何帮助。这意味着,如果GXT添加了ie10排列(它在3.0中完成),或者想要有一个独特的ie7排列(而不是与ie6混在一起),或者单独的Chrome与Safari排列(Chrome缩放会发出任何问题吗?),我们可能会破坏项目中的现有代码。

此外,GXT添加了一个'os'属性,让我们来处理平台问题。这可以是'mac','linux'或'windows'(或3.0.3以后的'unknown'来处理Solaris,Chrome OS等)。没有大量的情况需要这样做,但是一个例子包括本机OS X复选框,一旦你点击它们就会模糊,而不是Mac上的windows,linux或firefox。

如果设置user.agent,为什么我不需要设置gxt.user.agent

由于GXT用户代理属性集比GWT用户代理更广泛,我们根据GXT用户代理设置使用以下行设置GWT用户代理:

<!-- From /com/sencha/gxt/core/Core.gwt.xml about line 110 -->
<!-- Restrict the permutation explosion -->
<set-property name="user.agent" value="ie6">
  <any>
    <when-property-is name="gxt.user.agent" value="ie6" />
    <when-property-is name="gxt.user.agent" value="ie7" />
  </any>
</set-property>
<set-property name="user.agent" value="ie8">
  <when-property-is name="gxt.user.agent" value="ie8" />
</set-property>
<set-property name="user.agent" value="ie9">
  <any>
    <when-property-is name="gxt.user.agent" value="ie9" />
    <when-property-is name="gxt.user.agent" value="ie10" />
  </any>
</set-property>
<set-property name="user.agent" value="gecko1_8">
  <any>
    <when-property-is name="gxt.user.agent" value="gecko1_8" />
    <when-property-is name="gxt.user.agent" value="gecko1_9" />
  </any>
</set-property>
<set-property name="user.agent" value="safari">
  <any>
    <when-property-is name="gxt.user.agent" value="safari3" />
    <when-property-is name="gxt.user.agent" value="safari4" />
    <when-property-is name="gxt.user.agent" value="safari5" />
    <when-property-is name="gxt.user.agent" value="air" />
    <when-property-is name="gxt.user.agent" value="chrome" />
  </any>
</set-property>
<set-property name="user.agent" value="opera">
  <when-property-is name="gxt.user.agent" value="opera" />
</set-property>

GXT.gwt.xml如何限制排列数量,我该如何自己完成?

13个浏览器属性乘以三个操作系统应该给出大约39个排列,除非采取措施来限制这些属性。默认情况下,GXT.gwt.xml使用以下行将这些限制为基本的6种排列:

<collapse-property name="user.agent.os" values="*" />
<collapse-property name="gxt.user.agent" values="air, safari*, chrome" />
<collapse-property name="gxt.user.agent" values="ie6, ie7" />
<collapse-property name="gxt.user.agent" values="ie9, ie10" />
<collapse-property name="gxt.user.agent" values="gecko*" />

通过继承GXT,您有机会设置自己的排列限制。如果您不希望自己设置它们,请继续并继承GXT本身。使用<collapse-property><collapse-all-properties />的更多信息可以在http://code.google.com/p/google-web-toolkit/wiki/SoftPermutations

找到