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());モデルと行レンダラーを設定した後に呼び出すだけです ( rowsRows コンポーネント ID が提供され、既にコントローラーに自動配線されています)。ここでzkfiddleのライブデモとソースを参照してください

UPDATE : Render-On-DemandClients.scrollIntoView(Component)機能を使用している場合は機能しません。当然のことながら、スクロールしたい行が最初のページの読み込み時に読み込まれなかった場合です。

于 2012-09-06T07:39:59.850 に答える