Прокрутка сетки после рендера ZK

Я пытаюсь прокрутить вниз до нижней части сетки, после того, как модель была установлена.

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

2 ответа

Просто позвони Clients.scrollIntoView(rows.getLastChild()); после того, как вы установили модель и визуализацию строк (при условии rows является идентификатором компонента Rows и уже автоматически подключен к вашему контроллеру). Смотрите живое демо на zkfiddle здесь и источник

ОБНОВЛЕНИЕ: Clients.scrollIntoView(Component) не будет работать, если вы используете функцию Render-On-Demand, потому что, естественно, если строка, к которой вы хотите прокрутить, не будет загружена при начальной загрузке страницы.

Почему бы вам не отсортировать myList по убыванию сначала, чтобы последняя строка стала первой вместо того, чтобы управлять полосой прокрутки?
На мой взгляд, это было бы проще и соответствовало опыту пользователей.

Другие вопросы по тегам