6

インラインフィルタリング(DataViewを使用)を備えたスリックグリッドがあります。データの各行に一意のIDを割り当て、このID(行番号ではない)をUIの別の場所でdivを更新する関数に渡します。

フィルタリングしない場合、これは正常に機能します。ただし、IDを渡す前に列をフィルタリングすると、行番号を反映するようにIDが変更されます。文字列IDを行番号に変更することもできます。

それは奇妙に思えます。何が起こっているのか考えてみてください???

grid_msc.onClick.subscribe(function(e, args) {
    var cell = grid_msc.getCellFromEvent(e);
    var row = cell.row;             // get row #
    var row_ID = data_msc[row].id;  // get the row ID, not row #
    var msc = data_msc[args.row][grid_msc.getColumns()[args.cell].field];

    alert("Row#:"+row+", RowID:"+row_ID+", Value:"+msc);
    mscToUI(msc, row_ID);
});


// Add the selected item to the UI
    function mscToUI(addC, cellNum) {
        alert(addC+", "+cellNum);
        $('#selectedMsc').append('<a href="javascript:removemsc('+cellNum+')" id="'+cellNum+'" class="rSel"><img src="images/remove.png" align="texttop" border="0" style="padding-right:4px;">'+addC+'<br /></a>');
    }
})
4

1 に答える 1

16

すでに DataView を使用している場合は、元のデータ ソース( )ではdataView_mscなく、DataView から行/データを取得する必要があります( data_msc)。

grid_msc.onClick.subscribe(function(e, args) {
  var cell   = grid_msc.getCellFromEvent(e);  // get the cell
  var row    = cell.row;  // get the row's index (this value will change on filter/sort)
  var item   = dataView_msc.getItem(row);  // get the row's item (see: object, data)
  var msc    = item[grid_msc.getColumns()[cell.cell].field];  // get the value of the cell

  alert("Row Index:"+row+", RowID:"+item.id+", Cell Value:"+msc);
  console.log(item);
  mscToUI(msc, item.id);
});

mscToUI()クリックされたセルの値とその行のidプロパティの値を使用して、内部で何をしようとしているのかよくわかりません。item行のデータ オブジェクト全体 ( ) を単純に関数に渡し、DataView のルックアップ メソッドを使用して他の操作を実行する方が賢明だと思います。

  • getIdxById(id)- アイテムの ID を使用して、グリッド内の相対的な行インデックスを見つけます`
  • getItem(i)-フィルタリングされたグリッドの行インデックスを使用して、その行のデータ/アイテムを返します
  • getItemById(id)- アイテムの ID を使用して、そのアイテムのデータ/アイテムを返します
  • getItemByIdx(i)-フィルタリングされていないグリッドの行インデックスを使用して、その行のデータ/アイテムを返します
于 2012-09-30T20:12:21.773 に答える