- 此解决方案适用于 GXT 2.2.0 和 GWT 2.0.4 *
虽然最初的海报已经转移,但我最近遇到了这个问题,并认为我会发布我的解决方案,以防其他人偶然发现这个问题。
没有理由不能将 GXT Grid 直接添加到 GWT LayoutPanel。问题是两个库的样式/定位方法冲突。基本上它归结为这样一个事实,即 Grid 的大小基于其父级的 height 属性,该属性未设置意味着网格的主体被分配的高度为 0 并且网格本身的高度等于网格标题的高度(如果展示)。
因此,解决方案是在流量传回 GWT 后撤消 GXT 所做的事情。这是一个模板解决方案:
class MyGridWrapper extends Composite {
private LayoutPanel widget;
private Grid<?> grid;
public MyGridWrapper(Grid<? extends ModelData> grid) {
this.grid = grid;
widget = new LayoutPanel();
initWidget(widget);
widget.add(grid);
// Set the grid's vertical and horizontal constraints
// ... populate the rest of the panel
}
@Override
protected void onLoad() {
// onLoad is called after GXT is finished so we can do what we need to
// Redo what the LayoutPanel did originally
grid.el().setStyleAttribute("position", "absolute");
grid.el().setStyleAttribute("top", "0");
grid.el().setStyleAttribute("bottom", "0");
grid.el().setStyleAttribute("left", "0");
grid.el().setStyleAttribute("right", "0");
// Undo any height settings on the .x-grid3 element
El mainWrap = grid.el().firstChild();
assert mainWrap.hasStyleName("x-grid3") : "Wrong Element: " + mainWrap.getStyleName();
mainWrap.setStyleAttribute("height", "auto");
// Undo any height settings on the .x-grid3-scroller element
El scroller = grid.el().firstChild().firstChild().getChild(1); // FUN!
assert scroller.hasStyleName("x-grid3-scroller") : "Wrong Element: " + scroller.getStyleName();
scroller.setStyleAttribute("height", "auto");
}
}
这些断言有助于防止明显非常脆弱的代码,因此请注意这是一个 GIANT, GIANT hack。
--