16

この質問は、オレグとその中のデモグリッドのこの回答を見た後に始まりました。

gridComplete:

これは、すべてのデータがグリッドにロードされ、他のすべてのプロセスが完了した後に発生します。また、イベントはデータ型パラメーターとは無関係に、ページングなどのソート後に発生します。

loadComplete:

このイベントは、すべてのサーバー リクエストの直後に実行されます。data データ型グリッド パラメータに応じた応答からのデータ

そのドキュメントから、gridCompleteグリッドの描画の最後にloadComplete起動し、jqGrid がバックエンドとの通信を完了した後に起動することがわかりました。

それで、なぜデモでloadCompleteは、セルの色を変更するために使用され、使用されないのgridCompleteでしょうか?

4

2 に答える 2

28

この質問は、jqGridの多くのユーザーから寄せられていると思います。ですから、答えを知ることは興味深いことです。

私は個人的にを使用することを好みますloadComplete。私が投稿したすべての例のコードを調べるとgridComplete、元のポスターが質問に投稿したときにのみ見つかり、小さなコードを変更したはずです。loadCompleteのいくつかの長所loadCompleteと短所があるため、私は使用することを好みgridCompleteます。

ここに利点がありloadCompleteます:

  • これは、グリッド本体全体がリロードされる場合に呼び出される最後のコールバックです。たとえば、サーバーからグリッドにページをロードした後。ユーザーが列の並べ替えを変更したり、フィルターを設定したり、グリッドの別のページを選択したりした場合は、理解することが重要です。グリッド本体がリロードされます。
  • loadCompletedataローカルデータの全ページまたはサーバーからロードされた全データを表すパラメータがあります。

反対側では、内部(ここを参照gridCompleteから(現在のバージョンのjqGrid 4.4.4で)呼び出され、 (ここを参照)、(ここを参照、および(ここを参照メソッドから呼び出されます。(ここを参照)と(ここを参照)に加えて。それは人が主に望んでいるものではありません。updatepagerdelRowDataaddRowDataclearGridDataaddXmlDataaddJSONData

もう1つの欠点は、(ここを参照)と(ここを参照)のコードをどこから呼び出され、呼び出されるgridCompleteかを調べることができることです。と内部パラメータを使用すると、サーバーから返された完全なデータで埋められます。;を使用するとわかります。コールバックは、データの最初のページがサーバーからロードされた後に呼び出されます。現時点では、ページのデータのみが含まれています。反対側は、サーバーから返されたすべてのデータが処理され、ローカルでおよびに保存された後、後で呼び出されますaddXmlDataaddJSONData updatepagergridCompleteloadonce: truedata_indexloadonce: truegridCompletedata_indexloadCompletedata_index

loadonce: trueサーバーからデータをロードし、オプション、、をclearGridData使用addRowDataしない場合は、の代わりにをdelRowData使用できます。gridCompleteloadComplete

于 2013-03-15T18:05:03.693 に答える
3

jqGrid のソース(ソース)を見ると、grid.base の 1 行だけで gridComplete が呼び出されていることがわかります。

1725: if($.isFunction(ts.p.gridComplete)) {ts.p.gridComplete.call(ts);}

この行は関数から来ていますupdatePager

loadComplete関数で見つけることができますpopulate(1757 行目)。とは異なりgridComplete、追加のパラメーターが渡されます。どちらのコールバックも への参照を受け取りますthisloadComplete、サーバーから返された (またはローカルに渡された) データも受け取ります。

1858: case "xmlstring": 
if(lcf) {ts.p.loadComplete.call(ts,dstr);}

1869: case "jsonstring": 
if(lcf) {ts.p.loadComplete.call(ts,dstr);}

1881: 
case "local":
case "clientside":
if(lc) { lc.call(ts,req); }

問題は、関数populateと関数updatePagerが並行して発生することが多いため、並べ替えとページングのときに両方のコールバックが呼び出されることがわかります。ここでも違いはloadComplete、追加のパラメーターが渡されることです。

まだ遭遇したことのない微妙な違いがあるかもしれません...そして、一方が呼び出され、もう一方が呼び出されない場合があるかもしれませんが、ソートとページングでは両方が呼び出されることに気付きました。

于 2013-03-15T16:48:15.903 に答える