2012-09-27 33 views
5

我有一个带内联过滤的slickgrid(使用DataView)。我为每一行数据分配了唯一的ID,并且将这个ID(不是行号)传递给一个函数,该函数在UI上的其他位置更新div。SlickGrid过滤后的行ID更改

这工作正常,如果我不过滤。但是如果我在传递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>'); 
    } 
}) 
+0

真的......没有人知道这件事?看起来像这样常见的事情是如此显而易见的错误! – user1415445

回答

14

如果您已经使用数据视图,那么你应该从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); 
}); 

我不太清楚你打算用单击的单元格的值及其行的id属性的值内mscToUI()做什么。我想这可能是更明智的简单行的整个数据对象(item)传递给函数,并使用数据视图的查询方法瓶坯任何其他操作:

  • getIdxById(id) - 利用该项目的ID,发现在相对行索引在grid`
  • getItem(i) - 随着过滤电网的行索引,返回的数据/项目说行
  • getItemById(id) - 利用该项目的ID,返回的数据/项目说项目
  • getItemByIdx(i) - 使用未经过滤的网格的行索引,返回所述行的数据/项目
+0

我认为这个答复应该被接受!顺便说一句,谢谢你的答案帮了很多! – makim