当我在Slickgrid中创建一个复选框列(通过使用格式化程序/编辑器)时,我注意到需要两次点击才能与它进行交互(一个用于聚焦单元格,另一个用于与复选框交互).(这很有道理)
但是,我注意到我可以通过一次单击与复选框选择器插件(用于选择多行)进行交互.有什么方法可以让我的所有复选框都以这种方式运行吗?
对于其他读者,我通过在点击事件上修改网格数据本身来解决这个问题.将布尔值设置为反向,然后格式化程序将显示单击或未单击的复选框.
grid.onClick.subscribe (function (e, args)
{
if ($(e.target).is(':checkbox') && options['editable'])
{
var column = args.grid.getColumns()[args.cell];
if (column['editable'] == false || column['autoEdit'] == false)
return;
data[args.row][column.field] = !data[args.row][column.field];
}
});
function CheckboxFormatter (row, cell, value, columnDef, dataContext)
{
if (value)
return '<input type="checkbox" name="" value="'+ value +'" checked />';
else
return '<input type="checkbox" name="" value="' + value + '" />';
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你.
我使用该事件为我的布尔字段“ can_transmit ”onBeforeEditCell实现此目的
基本上捕获一个编辑单元格,单击所需的列,自己进行更改,然后返回 false 以停止单元格编辑事件。
grid.onBeforeEditCell.subscribe(function(row, cell) {
if (grid.getColumns()[cell.cell].id == 'can_transmit') {
if (data[cell.row].can_transmit) {
data[cell.row].can_transmit = false;
}
else {
data[cell.row].can_transmit = true;
}
grid.updateRow(cell.row);
grid.invalidate();
return false;
}
Run Code Online (Sandbox Code Playgroud)
这对我有用。但是,如果您使用 DataView 功能(例如过滤),则需要执行额外的工作来通过此更改更新数据视图。 我还没弄清楚该怎么做...