2012-03-13 12 views
0

私はこれをかなり掘り起こしてきました。私dojox.grid.datagridを使用していると私は200から300の行をもたらすajax呼び出しがあります。Dojo DataGrid仮想スクロール・ハウツー?

グリッドはChromeでうまくレンダリングしてスクロールしますが、スクロールはIE 7と8では非常に遅いです。問題を解決するために仮想スクロールを使用したいと思いますが、サンプルコードは見つかりません。

ここに私のコードはどのように見えますか?

function setupAvailableScenes(location) { 
var avaiableScenesGridPane = dijit.byId("AvaiableScenesGridPane"); 
var availableScenesGrid = dijit.byId("AvailableScenesGrid"); 
if (_isFirstLoad) { 

    availableScenesGrid = new dojox.grid.DataGrid({ 
     id: 'AvailableScenesGrid', 
     store: availableScenesStore, 
     query: { Id: "*" }, 
     sortInfo: "1", 
     rowsPerPage: 20, 
     autoHeight:20, 
     style: "width:315px", 
     structure: [ 
       { name: "Available Scenes", field: "Name", width: "85%" }, 
       { name: " ", 
        field: "_item", 
        rowsPerPage: "25", 
        type: dojox.grid.cells._Widget, 
        editable: false, 
        width: "15%", 
        formatter: function (scene) { 
         return new dijit.form.Button(
         { 
          label: "+", 
          onClick: function() { 
           AddSceneToSelectedScenes(scene); 
          } 
         }) 
        } 
       } 
      ] 
    }); 

    avaiableScenesGridPane.set('content', availableScenesGrid); 
} 

var availableScenesStore = new dojo.data.ItemFileWriteStore({ 
    url: _applicationPath + "/Location/" + location.Id + "/Scene.json", 
    preventUrlCache: true 
}); 

availableScenesGrid.setStore(availableScenesStore); 

}

答えて

1

あなたはrowsPerPage = 25を指定しているので、あなたはスクロール言及ので、それはすでに(それは場合にのみ、ユーザーがスクロールダウン行の新しいセットを引っ張る)

を仮想スクロールをやっていることは非常に遅いですパフォーマンスの問題は、新しい行のレンダリングにあるように思えます。パフォーマンスを向上させるためにいくつかのことを試すことがあります。 1)autoHeight属性を削除します。その代わりに、スタイル属性 の固定高さを指定します。2)フォーマッタ関数では、dijitを返す代わりに、単純なhtmlボタン/アンカーをボタン として返すようにしてください。dojox.grid.cells._Widget属性を削除してください。書式関数で使用するhtmlを返します

+0

ありがとうございました。私はそれが仮想スクロールを行うことになっていることを知っているが、私はパラメータがヘッダーで送信されて表示されません。 私はstartrowと返す行の数は、私のコントローラに送信し、次にデータ層で行の数を返す必要があるパラメータになると仮定しています。 dijitで単純なボタンが表示されるかどうかを確認します。あなたが仮想スクロールについて考えていることを私に教えてください。 – Ali

+0

ええええええええええええええええええええ?どのヘッダーでパルメータが送られると思いますか?遅延読み込みや仮想スクロールを指していますか? –

+0

バーチャルスクロール。基本的には、グリッドに一度に25〜50行をロードしたい。 – Ali

2

DataGridのパフォーマンスを向上させるためにできる最大のものの1つは、ItemFileReadStore/WriteStoreを捨て、最適化されたデータストア(個人的に私はQueryReadStoreが好きです)を使用することです。これは、仮想スクロール/ページネーションを処理するために何らかの種類のサーバー側サーブレット(PHP/JSP/etc)を必要とすることを意味しますが、JSONファイルに基づいてストアを使用するだけでは大幅なパフォーマンス向上は見られませんでした。

か助けていない場合があり、考慮すべきいくつかの他のもの、:

  • はあなたの匿名のフォーマッタ機能に名前を付け、クロムまたはFirebugのプロファイルを持つテーブルをスクロールしてみてください、それは多くを占有だかどうかを確認するためにオン(または、Vijay Agrawalさんのように、dijit.form.Buttonをバニラのhtml <button>タグに置き換えてみてください)
  • 実際にはそのセルにdojox.grid.cells._Widgetタイプを指定する必要はありません。有効なDijitを返すカスタムフォーマッタを持つことは、Gridが適切なことをするのに十分であるはずです。
+0

Ryan、google +で私に戻って、ここに回答を書いてくれてありがとう。私は読書店を使用したいと思いますが、私は書店を貼る必要があると思うので、グリッドをオンザフライで更新する必要があります(私が間違っている場合は修正してください)。 あなたのサイトに投稿したサンプルコードを調べましたが、今後もその点を念頭に置いていきます。 グリッドが編集可能なままになっている場合は、私がJsonStoreを使用していたのでしょうか?私。グリッドを編集してから、ajax呼び出しをポストバックすることはできますか?グリッドを編集するには書き込みストアが必要ですか?私はそうしていると思いますが、間違っていると思います; – Ali

+0

JsonRestストアはあなたの変更を永続させるべきです。 Dojo Webサイトには、これを行う方法に関するチュートリアルがあります。http://dojotoolkit.org/documentation/tutorials/1.6/store_driven_grid/ –