loadonce:true オプションを使用して大量の行 (1000 秒単位) を jqgrid にロードします。jqgrid がロードされた後、ユーザーはローカルでデータを操作します。また、列の1つに条件付き書式があり、次のようなものがあります
cellattr: function(rowId, cellValue, rawObject, cm, rdata) {
if (rawObject[0]=='Stale'){
return ' class="stale-highlight"';
} else if (rawObject[0]=='Not Stale') {
return ' class="notstale-highlight"';
}
}
ユーザーが並べ替え、フィルターなどを行うとすぐに条件付き書式が失われることを除いて、正常に機能します。
これは、グリッドがロードされた後にデータ型をローカルに変更する loadonce オプションに関連している可能性があることはわかっています。ユーザーが servrr をポーリングせずにデータを操作できるようにするにはどうすればよいですか?
ありがとうキャスビー
**
アップデート:
**
問題が見つかりました。うまくいけば、他の人にも役立つでしょう。
データ サイズを減らすために、次の json 形式を使用します。
{"rows":[{"id":"1","cell":["Not Stale","xxxx","2012-10-16 14:20:59",
"110517853","10797445","2012-10-17 08:29:51",
"xxxx","2012-10-17 08:33:02", "xxxx",
"105954724","xxxxxx","11111.0000",
"10000000.0000","10000000.0000"]}]
,"page":1,"total":1,"records":"2"}
3 つは、json に表示される列名ではありません。したがって、最初にグリッドがロードされるとき、cellattr で使用される rawObject パラメータは値の配列です (列に対応)。グリッドがロードされた後、rawObject はオブジェクトになりました。column_name:column_value のペアが含まれています。
したがって、私の元のコードは、最初のグリッド ロード中にのみ機能します。
cellattr: function(rowId, cellValue, rawObject, cm, rdata) {
if (rawObject[0]=='Stale'){
return ' class="stale-highlight"';
} else if (rawObject[0]=='Not Stale') {
return ' class="notstale-highlight"';
}
}
この問題を解決するには、次の 2 つのオプションがあります。
use the column_name:column_value pairs in the json object and change the cellattr code to reference the rawObject.column_name.
また
add extra logic to check rawObject.column_name in the cellattr function. it may be less efficient programmingwise but sometime changing input is not that easy
cellattr: function(rowId, cellValue, rawObject, cm, rdata)
{ if (rawObject[0]=='Stale' || rawObject.column_name=='Stale')
{ return ' class="stale-highlight"'; }
else if (rawObject[0]=='Not Stale' || rawObject.column_name=='Not Stale')
{ return ' class="notstale-highlight"'; }
ありがとうキャスビー