0

在设置模型后,我试图向下滚动到网格的底部。

1)我设置模型:

myGrid.setModel(new ListModelList<Object>(myList));

2)我覆盖了行渲染器

myGrid.setRowRenderer(new RowRenderer<Object>() {
        @Override
        public synchronized void render(Row row,final Object data, int index) throws Exception {                    
            row.setStyle("commonCellPadding");
                            .
                            .
                            .

            row.appendChild(htmlMessage);
        }           
    });

3)最后,如果用于设置模型的列表太大(.zul 中的网格具有固定高度)我想显示最后的结果(在这种情况下是最近的)。我需要在渲染后自动向下滚动。我怎样才能做到这一点?

我尝试过的事情

a) 在渲染后调用 javascript 函数,这不起作用,因为 gridEle.scrollHeight 属性返回 zul 中设置的网格的固定高度(如果不是,则返回 0)而不是模型之后的网格高度被设置。

myGrid.addEventListener(ZulEvents.ON_AFTER_RENDER, new EventListener<Event>() {
        public void onEvent(Event event) throws Exception
        {

            Clients.evalJavaScript("var gridEle = document.getElementById('"+myGrid.getUuid()+"-body"+"'); gridEle.scrollTop = gridEle.scrollHeight;alert(gridEle.scrollHeight);");             
        }
    });
4

2 回答 2

0

为什么不首先对 myList 进行降序排序以使最后一行成为第一行而不是控制滚动条?
在我看来,它会更容易并匹配用户体验。

于 2012-09-04T09:51:40.373 回答
0

只需Clients.scrollIntoView(rows.getLastChild());在设置模型和行渲染器后调用(提供rows的是 Rows 组件 ID,并且已经自动连接到您的控制器)。在此处查看 zkfiddle 上的现场演示和来源

更新Clients.scrollIntoView(Component)如果您使用的是按需渲染功能,则无法正常工作,因为如果您要滚动到的行自然不会在初始页面加载时加载。

于 2012-09-06T07:39:59.850 回答