筛选后SlickGrid行ID会更改

use*_*445 6 javascript filter slickgrid

我有一个带内联过滤的slickgrid(使用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>');
    }
})
Run Code Online (Sandbox Code Playgroud)

idb*_*old 15

如果您已经在使用DataView,那么您应该从获取行/数据(dataView_msc),而不是原始数据源(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);
});
Run Code Online (Sandbox Code Playgroud)

我不太确定你计划在里面做什么mscToUI(),点击单元格的值和它的行id属性的值.我认为简单地将行的整个数据对象(item)传递给函数并使用DataView的查找方法执行任何其他操作可能更为明智:

  • getIdxById(id) - 使用项目的id,在网格中找到相对行索引
  • getItem(i)- 使用过滤网格的行索引,返回所述行的数据/项
  • getItemById(id) - 使用项目的ID,返回所述项目的数据/项目
  • getItemByIdx(i)- 使用未过滤网格的行索引,返回所述行的数据/项