10

私はJqGridに取り組んでいます。

を指定するとどういう意味か知りたいですgridview:true

そして、どのような場合に提供する必要がありますか?

私は最近、そのようなjqGridの1つに取り組んでafterInsertRowいて、呼び出されていませんでした。一度削除するgridview:trueと、呼び出しが行われます。

これは私自身が経験した1つのケースであり、他にもgridview:true使用するかどうかを知っておくべきケースがあるのではないかと思っていました。

これについて教えてください。

4

2 に答える 2

14

gridview: true私は、オプションがドキュメントで適切に説明されていないことに同意します。場合によっては(TreeGridの場合のように)、オプションが自動的に設定されます。だから私はそれが何を意味するのか、そしてなぜ私が常にgridview: trueオプションを使用し、決して使用しないことをお勧めするのかを説明しようとしますafterInsertRow

多くの人々は、JavaScriptとして他のいくつかのコンピューター言語から始めて、プログラムの何らかのスタイルを作成した後、Webブラウザーで実行される彼の最初のプログラムを作成します。私は3年前に同じ問題を抱えていました。HTMLページに変更を加えた後、Webブラウザが何をしなければならないかを理解することが重要です。jQueryの使用法では、それはあなたが恒久的に行うことです。

ページ上の一部のDOM要素を変更すると、ページ上に存在する他のすべてのDOM要素の位置を変更できます。フローティングモデル(のように)または他の多くのCSS設定について考える場合float: left、Webブラウザーは既存のページのビットマップ表現を移動して、新しく挿入された要素を挿入するだけではないことを理解できます。したがって、Webブラウザは、ページに存在するすべての要素の位置を再計算し、一部を別の場所の要素から移動する必要があります。要素のCSSスタイルを変更しても、そのような名前のリフローが発生します。記事を読んで、主題についてのビデオを見ることをお勧めします。

上記の場合のWebブラウザのパフォーマンスを向上させる主なアイデアは、ページの変更回数を減らすことです。したがって、1つのDOM要素の5つのスタイルを変更する必要があるので、1回の操作でこれを行う必要があります。jQuery.css({...})5つの個別の呼び出しの代わりに、変更されたすべてのスタイルで使用できます。さらに良いのは、1つのCSSクラスを定義してjQuery.addClassメソッドを使用することです。

jqGridの場合<tbody>、グリッドのすべての行とセルを埋める必要があります。オプションを使用gridview: trueすると、jqGridはすべての行のコンテンツをHTMLフラグメントを含む文字列として収集します。その後、内部プロパティを設定する行でjqGridを呼び出しjQuery.appendて、ページにHTMLフラグメント全体を設定します。innerHTML

同じ理由で、、またはHTMLフラグメントを処理するカスタムフォーマッターを使用する必要がありますcellattrrowattrこれ、セルまたは行を文字列として表します。最後に、文字列は他の文字列に追加され、jQuery.append上記のような操作で使用されます。

コールバック関数を使用するには、コールバックを呼び出す前afterInsertRowに、グリッドのすべての行をページに配置afterInsertRowする必要があります。そのため、オプションの使用が不可能になりgridview: true、ページの動作が遅くなります。

正確には、前に説明したパフォーマンスの低下は、グリッドが大きい場合にのみ表示され、低速のWebブラウザー(Internet Explorer、特に古いバージョンのIEなど)の場合にほとんど明らかになります。

于 2012-09-20T19:48:27.033 に答える
5

jqGridのドキュメントによるとgridview

3.4.Xを含む以前のバージョンのjqGridでは、比較的大きなデータセット(行数> = 100)を読み取ると、速度の問題が発生していました。この理由は、すべてのセルがグリッドに挿入されるときに、約5〜6個のjQuery呼び出しをグリッドに適用したためです。これで、この問題は解決されました。ここで、jQueryを追加してエントリ行を一度に挿入します。結果は印象的です-約3〜5倍速くなります。すべてのデータを一度に挿入するとどうなりますか?はい、これはgridviewオプションを使用して実行できます(trueに設定してください)。その結果、グリッドは5〜10倍高速になります。もちろん、このオプションがtrueに設定されている場合、いくつかの制限があります。trueに設定すると、treeGrid、subGrid、またはafterInsertRowイベントを使用できなくなります。グリッドでこれらの3つのオプションを使用しない場合は、このオプションをtrueに設定して、速度を楽しむことができます。

したがって、このオプションを使用すると、treeGrid、subGrid、またはと互換性がないことに注意して、速度を大幅に向上させることができますafterInsertRow。それが限界の範囲だと思います。これ以上見つかった場合は、ドキュメントを更新できるようにお知らせください。


価値があるのは、メソッドの特定のケースとスキップされる場所を実際に確認できること です。grid.base.jsaddXmlDataaddJSONDataafterInsertRow

if(ts.p.gridview === false ) {
    $("tbody:first",t).append(rowData.join(''));
    $(ts).triggerHandler("jqGridAfterInsertRow", [rid, rd, xmlr]);
    if(afterInsRow) {ts.p.afterInsertRow.call(ts,rid,rd,xmlr);}
    rowData=[];
}

treeGridとsubGridの制限はより微妙であり、コードで明示的に呼び出されません。

于 2012-09-20T19:22:34.530 に答える