2

我的环境是:GWTP 0.7、GWT 2.4.0、GXT 3.0.1。这个问题在某种程度上与GXT 3 网格滚动问题有关,但除了那里的解决方案对我不起作用。

我的情况:

public abstract class AbstractGridView extends ViewImpl implements AbstractGridPresenter.MyView {

    protected final VerticalLayoutContainer cont = new VerticalLayoutContainer();

    protected final VerticalLayoutData toolBarData = new VerticalLayoutData(1, -1);
    protected final VerticalLayoutData contentData = new VerticalLayoutData(1, -1); //grid's layout config

    protected final ToolBar toolBar = new ToolBar();
    protected final TextButton addItemButton = new TextButton(ADDBUTTON_TEXT);

    @Inject
    protected AbstractGridView() {
        toolBar.add(addItemButton);
        cont.add(toolBar, toolBarData);
    }

    public Widget asWidget() {
        return cont;
    }
}    
public class DepartmentsView extends AbstractGridView implements DepartmentsPresenter.MyView {
    private final Grid<Department> grid;
    private final ColumnModel<Department> model;
    private final List<ColumnConfig<Department, ?>> config = new ArrayList<ColumnConfig<Department,?>>();
    private final ListStore<Department> store = new ListStore<Department>(PROPS.key());
    @Inject
    public DepartmentsView() {
        super();
        config.add(new ColumnConfig<Department, Long>(PROPS.id()));
        config.get(config.size() - 1).setHeader(IDCOLUMN_HEADER);
        config.add(new ColumnConfig<Department, String>(PROPS.name()));
        config.get(config.size() - 1).setHeader(NAMECOLUMN_HEADER);
        config.add(new ColumnConfig<Department, String>(companyNameProvider));
        config.get(config.size() - 1).setHeader(COMPANYCOLUMN_HEADER);

        model = new ColumnModel<Department>(config);

        grid = new Grid<Department>(store, model);
        grid.getView().setAutoFill(true);

        filters.initPlugin(grid);
        filters.setLocal(true);
        filters.addFilter(idFilter);
        filters.addFilter(nameFilter);
        filters.addFilter(companyFilter);

        cont.add(grid);
    }
}

所有这些都注入到BaseView中的BorderLayoutContainer中:

public class BaseView extends ViewImpl implements BasePresenter.MyView {
    private final Viewport viewPort = new Viewport();

    private final BorderLayoutContainer borderContainer = new BorderLayoutContainer();

    private final ContentPanel west = new ContentPanel();
    private final ContentPanel north = new ContentPanel();
    private final ContentPanel center = new ContentPanel();
    private final BorderLayoutData westData = new BorderLayoutData(200);
    private final BorderLayoutData northData = new BorderLayoutData();
    private final BorderLayoutData centerData = new BorderLayoutData();
    @Inject
    public BaseView() {
        borderContainer.setBorders(true);
        west.setResize(true);
        center.setResize(false);
        center.setHeight("auto");
        north.setResize(false);
        westData.setCollapsible(false);
        westData.setCollapseMini(false);
        westData.setMargins(new Margins(5, 5, 5, 5));
        northData.setCollapsible(false);
        northData.setMargins(new Margins(5));
        northData.setSize(57);
        centerData.setCollapsible(false);
        centerData.setMargins(new Margins(5));
        borderContainer.setWestWidget(west, westData);
        borderContainer.setCenterWidget(center, centerData);
        borderContainer.setNorthWidget(north, northData);
        viewPort.add(borderContainer);
    }

    public Widget asWidget() {
        return viewPort;
    }

    @Override
    public void setInSlot(Object slot, Widget content) {
        setMainContent(content);
    }

    private void setMainContent(Widget content) {
        center.clear();
        if (content != null) {
            center.setWidget(content);
        }
    }
}

因此,如果我在将网格添加到 VerticalLayoutContainer(续)时不附加 contentData,它会呈现为 VerticalLayoutData(1, -1),即:根本不计算网格的高度,它的内容在页面底部流动没有滚动条可以到达底部页面边框下方的任何行。如果我在问题开头的链接中设置 VerticalLayoutData (1, 1),我只能看到网格的标题和网格的内容高度计算为 0px(尽管它存在于页面的 DOM 中)。并且仅当我手动设置高度时,例如 setHeight(300) 网格的高度设置像素的数量,并且垂直滚动条显示为到达网格存储中的任何行,尽管人们可以很容易地理解手动设置网格'

我在小部件配置中错过了什么,或者这是一个有任何合理解决方法的错误?

4

1 回答 1

3

我发现布局问题:

center.setResize(false); // BaseView's constructor

这使得 BorderLayoutContainer 的 ContentPanel 不会调整子小部件 (VerticalLayoutContainer) 的大小以适应。

于 2012-10-29T06:09:26.813 回答