Прокрутка сетки после рендера 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 имеет фиксированную высоту), я хочу показать последние результаты (в данном случае более свежие). Мне нужно автоматически прокручивать вниз после рендеринга. Как я могу это сделать?

Вещи, которые я пробовал

а) Вызов функции javascript после рендера, это не работает из-за того, что атрибут gridEle.scrollHeight возвращает фиксированную высоту сетки, установленную в зуле (или 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);");             
        }
    });

person Camauu    schedule 31.08.2012    source источник
comment
Вы пробовали ниже предложение, которое я сделал?   -  person kachhalimbu    schedule 25.09.2012
comment
Я пытался, но у меня не получилось, может быть, это Render-On-Demand, когда у меня будет свободное время, я продолжу исследования.   -  person Camauu    schedule 26.09.2012


Ответы (2)


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

person francishsiao    schedule 04.09.2012
comment
Код предназначен для веб-чата, обычно последнее полученное или отправленное сообщение отображается в нижней части окна. Если в чате есть история (уже запущены сообщения), я хочу, чтобы окно прокручивалось вниз, чтобы показать последнее сообщение в беседе. - person Camauu; 05.09.2012

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

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

person kachhalimbu    schedule 06.09.2012