Grid 渲染ZK后的网格滚动

Grid 渲染ZK后的网格滚动,grid,zk,Grid,Zk,在模型设置完成后,我试图向下滚动到网格的底部 myGrid.addEventListener(ZulEvents.ON_AFTER_RENDER, new EventListener<Event>() { public void onEvent(Event event) throws Exception { Clients.evalJavaScript("var gridEle = document.getElementByI

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

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);");             
        }
    });
1) 我设置了模型:

myGrid.setModel(new ListModelList<Object>(myList));
myGrid.setModel(新的ListModelList(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);
        }           
    });
myGrid.setRowRenderer(新的RowRenderer(){
@凌驾
公共同步的void呈现(行、最终对象数据、int索引)引发异常{
行设置样式(“commonCellPadding”);
.
.
.
行.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);");             
        }
    });
myGrid.addEventListener(ZulEvents.ON_渲染后,新建EventListener()){
public void onEvent(事件)引发异常
{
Clients.evalJavaScript(“var gridEle=document.getElementById(“+myGrid.getUuid()+”-body“+”);gridEle.scrollTop=gridEle.scrollHeight;alert(gridEle.scrollHeight);”;
}
});

为什么不先对myList进行降序排序,使最后一行成为控制滚动条的第一行?

在我看来,这将更加容易,并且与用户体验相匹配。

只需调用
Clients.scrollIntoView(rows.getLastChild())设置模型和行渲染器后(提供的
是行组件id,并且已经自动连接到控制器中)。查看zkfiddle和


更新
客户端。如果使用该功能,scrollIntoView(组件)
将不起作用,因为如果要滚动到的行在初始页面加载时不会被加载,则很自然。

该代码用于webchat,通常接收或发送的最后一条消息显示在窗口底部。如果聊天记录有历史记录(已经开始显示消息),我希望将窗口滚动到底,以显示对话中的最后一条消息。您是否尝试了我提出的以下建议?我尝试了,但没有成功,可能是按需渲染,当我有时间休息时,我将继续研究。