2012-08-31 40 views
0

我試圖在模型設置後向下滾動到網格的底部。渲染後的網格滾動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有固定的高度)我想顯示最後的結果(在這種情況下,最近的結果)。 我需要在渲染後自動向下滾動。我怎樣才能做到這一點?

事情,我不得不嘗試

一)調用後的渲染,這並不工作,由於該gridEle.scrollHeight屬性返回在ZUL設置好的網格的固定高度的事實javascript函數(或如果不是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);");    
     } 
    }); 
+0

你嘗試了下面的建議嗎? – kachhalimbu

+0

我試過了,但我沒有制定出來,也許它是Render-On-Demand,當我有時間休息時,我會繼續研究。 – Camauu

回答

0

爲什麼不排序myList首先降序,使最後一行成爲第一個而不是控制滾動條?
在我看來,它會更容易和匹配用戶體驗。

+0

代碼用於網聊,通常最後收到或發送的消息顯示在窗口的底部。 如果聊天有歷史記錄(已經開始有消息),我希望窗口滾動到底部以顯示對話中的最後一條消息。 – Camauu

0

在設置了模型和行渲染器(提供的rows是Rows組件ID並且已經自動連接到控制器中)之後,請致電Clients.scrollIntoView(rows.getLastChild());。查看zkfiddle heresource

UPDATE的現場演示:如果你正在使用Render-On-Demand功能,因爲當然,如果要就不會被加載初始頁面加載要滾動的行Clients.scrollIntoView(Component)是行不通的。