GWT CSS String Parser

时间:2010-04-09 13:53:30

标签: gwt gwt-widgets

gwt是否有内置的解析器,用于将基于CSS的字符串转换为java构造?

IE我有兴趣编写自己的小部件,例如高度/宽度:

public class MyWidget extends Composite{

  private double width;
  private Style.Unit widthUnit;
  private double height;
  private Style.Unit heightUnit;

  /**
  * @width - width of my widget in CSS dimensions (ie. "10px", "1em" ...)
  * @height - height of my widget in CSS dimensions (ie. "10px", "1em" ...)
  */
  public MyWidget(String width, String height){
  // Parse out strings and set dimensions / units
  }
}

我可以轻松地对此做一些正则表达式,但我想我会看到是否有某种内置机制,我不想重新发明......

另外,我当然考虑过只接受构造函数中的double width, Style.Unit widthUnit,但是UiObject的setWidth采用了一个CSS字符串,所以我仍然需要做一些String munging,尽管反过来。理想情况下,我有2个构造函数来实现这两种可能性,并使用一种简单的机制来正确地解析字符串/维度和单位。

编辑:

忘记提及我想要解析这些价值的原因:

我正在尝试编写一个简单的滚动面板(想想iphone导航),所以当用户点击一个按钮时,一个新的“项目”从右侧滚动。

在后端,这将是:
1)获取新的滚动项目
2)扩展滚动包装以配合新项目(这是我需要实际宽度的地方)
2)附加到项目滚动包装器
3)动画滚动包装(通过向左滑动1个项目的宽度)将新添加的项目暴露给面板包装的可见部分

我需要原始宽度的原因是因为我想将我的滚动面板扩展到添加到其中的项目的宽度。如果我刚收到字符串,我就不能确切地说setWidth( currentWidth + itemWidth)

基本上我正试图模仿JQuery Tools Scroller

1 个答案:

答案 0 :(得分:3)

GWT目前使用Flute来解析CSS,但是有一个讨论要迁移到CSS Parser(http://cssparser.sourceforge.net/)。您可以直接使用其中一个解析器。

但是,对于你提到的用例 - 我认为你不需要那么重的东西。 GWT实际上不解析宽度和高度字符串,它只是将它传递给浏览器DOM,然后浏览器适当地评估它。你也应该这样做。

意思是,你的API只需要一个字符串。呼叫者可以通过ems或pxs或百分比。您的API并不关心,因为它只会将其推送到浏览器来理解。