【问题标题】:GXT 3 Grid height and scrollGXT 3 网格高度和滚动
【发布时间】:2012-10-24 08:07:32
【问题描述】:

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

我的情况:

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) 网格的高度设置像素的数量和垂直滚动条显示到网格存储中的任何行,尽管人们可以很容易地理解手动设置网格的高度没有任何原因Viewport 管理的应用程序窗口的解决方案。

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

【问题讨论】:

  • 您似乎遗漏了该示例的某些部分 - contentData 从未实际使用过。如果它用于Grid,则它不能有 -1 值。
  • 我实际上尝试使用 id,而不是使用它并使用 contentData 实例化为 VerticalLayoutData(1, 1);但我自己已经发现了错误:它是center.setResize(false);

标签: gwt gxt


【解决方案1】:

我发现了布局问题:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    相关资源
    最近更新 更多