2012-10-24 2 views
2

내 환경 : GWTP 0.7, GWT 2.4.0, GXT 3.0.1. 이 질문은 어떻게 든 GXT 3 grid scrolling issue과 관련이 있지만 그 해결책은 저에게 효과적이지 않습니다.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에 주입되는 모든 : VerticalLayoutContainer (계속) 내 그리드를 추가 할 때 내가 contentData를 첨부하지 않는 경우

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); 
     } 
    } 
} 

그래서, 그것은 동등하게 렌더링 을 VerticalLayoutData (1, -1)로 설정하면 : 그리드의 높이가 전혀 계산되지 않고 스크롤 바가없는 페이지 하단에서 내용이 흐르기 때문에 맨 아래 페이지 테두리를 낮추는 행이 있습니다. 내 질문의 시작 부분에있는 링크에서 VerticalLayoutData (1, 1)을 설정하면 그리드의 헤더 만 볼 수 있고 그리드의 콘텐츠 높이는 0px로 계산됩니다 (페이지의 DOM에 있음에도 불구하고). 그리고 높이를 수동으로 설정하는 경우에만 setHeight (300) 격자의 높이가 픽셀 수를 설정하고 세로 스크롤 막대가 그리드의 저장소에있는 행에 표시되도록 설정합니다. 수동으로 그리드의 높이를 설정하는 것이 어떤 이유인지 쉽게 알 수 있지만 Viewport로 관리되는 응용 프로그램 윈도우의 경우 솔루션입니다.

위젯 구성에서 놓친 부분이 있습니까? 아니면이 문제를 해결할 수있는 적절한 해결책이 있습니까?

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

에 맞게 자식 위젯 (VerticalLayoutContainer)를 크기를 조정하지 BorderLayoutContainer의이 ContentPanel을했다 :

+0

예제의 일부가 누락 된 것처럼 보입니다. 'contentData'는 실제로 사용되지 않습니다. 그것이'Grid '를 위해 사용된다면 -1 값을 가져서는 안됩니다. –

+0

실제로 id를 사용하려고 시도했지만 contentData를 사용하지 않기 위해 VerticalLayoutData (1, 1); 하지만 이미 오류를 발견했습니다 : 그것은 center.setResize (false);입니다. – GateKeeper

답변

3

나는 레이아웃 문제를 발견했습니다.