2

私はjqGridを初めて使用し、編集のためにセルからデータを取得する必要があり、サーバーへのアクセスを避けたいと考えていました。

カスタム フォーマッタは余分なタグをデータに追加し、単純getCellにすべてのタグも返すため、最初の実装では「手動で」削除することでした:

createColumn: function (val, options) {
    return '<div style="white-space:pre-wrap">' // etc.
        + val
        + '</div>';
}
// ...
// Note: rowId is known at this point
var myData = $('#myGrid').jqGrid('getCell',rowId,'myData');
var myDataWrapper = mydata.createColumn('');
data = data.substr(myDataWrapper.length-6,data.length-myDataWrapper.length);

もちろん、誰かがより複雑なタグを追加すると、これは壊れます。getCellそこで、実際にデータを見つける方法を調べました。残念ながら、現時点では名前を検索するだけなので、コードは次のとおりです。

var n = -1;
val colModel = $('#myGrid').jqGrid('getGridParam','colModel');
for (var i in colModel) {
    if (colModel[i].name === 'myData') {
    n = parseInt(i)+1;
}
var myData = $('#'+rowId+' td:nth-child('+n+') div').text();

でコードを複製するのは間違っているように見えgetCellましたが、名前から列番号を見つける他の方法はないようです (少なくとも、私は見つけられませんでした!)。divこれも、最初のバージョンと同様に、データが single でラップされていることを前提としています。

生成された html を見ると、jqGrid が実際にaria-describedby(これまでに見たことがない) を使用してセルにタグを付けていることに気付きました。これが常に存在することが保証されている場合、上記は次を使用して実行できます。

var myData = $('#'+rowId+' td:[aria-describedby=myGrid_myData] div').text();

しかし、これはまだデータが単一にラップされているという仮定を使用しておりdiv、もちろん、jqGrid の将来のバージョンでは、この属性が変更または削除される可能性があります。

そこで、データを でラップして ID を追加する簡単な解決策を試したspanので、簡単に見つけることができました。

createColumn: function (val, options) {
    return '<div style="white-space:pre-wrap">' // etc.
        + '<span id="' + options.gid + '_' + options.rowId + '_' + options.colModel.name + '">' + val + '</span>'
        + '</div>';
}
// ...
var myData = $('#myGrid_'+rowId+'_MyData').text();

これは最善の方法のように思えますが (私はそれを完全に制御できます)、フォーマッター関数に最初に渡されたデータを取得するためのより良い方法はありますか?追加のタグを追加する必要がありますか?

4

1 に答える 1

1

あなたの質問の最初の部分について:

カスタム フォーマッタが余分なタグをデータに追加しているため、単純に getCell を使用するとすべてのタグも返されます...

追加のタグなしでデータを取得する標準的な方法は、unformat関数を実装することです。jqGrid ドキュメントから:

定義済みフォーマッターの章で述べたように、定義済みの型はすべて編集モジュールと互換性があります。これは、番号、リンク、電子メールなどが正しく編集できるように変換されることを意味します。また、データを取得するメソッド (getRowData や getCell など) は、元の値を取得するためにこの unformat を使用していました。問題は、カスタム フォーマッタ関数を使用していて、編集またはメソッド getRowData および getCell を使用する場合に元の値を戻したい場合はどうすればよいかということです。

答えは: 独自のカスタム アンフォーマッタ関数を使用してそれを行うことができます。この関数は colModel で使用できます

例えば:

jQuery("#grid_id").jqGrid({
...
   colModel: [ 
      ... 
      {name:'price', index:'price', width:60, align:"center", editable: true,
       formatter:imageFormat, 
       unformat:imageUnFormat},
      ...
   ]
...
});

function imageFormat( cellvalue, options, rowObject ){
    return '<img src="'+cellvalue+'" />';
}

function imageUnFormat( cellvalue, options, cell){
    return $('img', cell).attr('src');
}

パラメータの説明を含む完全な詳細については、jqGrid ドキュメントのUnformattingセクションを参照してください。

于 2013-05-03T14:15:37.343 に答える