我有一个带有内联过滤功能的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>');
}
})
答案 0 :(得分:15)
如果您已经在使用DataView,那么您应该从 it (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);
});
我不太清楚你在mscToUI()
内做什么计划,点击的单元格值及其行id
属性的值。我认为简单地将行的整个数据对象(item
)传递给函数并使用DataView的查找方法执行任何其他操作可能更为明智:
getIdxById(id)
- 使用项目的ID,在网格中找到相对行索引getItem(i)
- 使用过滤后的网格的行索引,返回所述行的数据/项getItemById(id)
- 使用项目的ID,返回所述项目的数据/项目getItemByIdx(i)
- 使用未过滤网格的行索引,返回所述行的数据/项目