Slickgrid - 如何获取编辑单元格的值?

Slickgrid - how to get the value of edited cells?

我想让我的代码能够在更改单元格时立即更新数据库 table。但是,我可以获得更改后的单元格的值,而不是下一个单元格的数据。

我试过的方法都没有成功:

grid.onCellChange.subscribe(
    function (e, args) {
        //alert(data[args.row][grid.getColumns()[args.cell].field]);
        //alert(grid.getColumns()[args.cell].name);
        //alert(args);
        <%
            updateDatabase("UPDATE table1 "+
                           "SET "+
                           "  col1="+data[args.row][grid.getColumns()[args.cell].field]+" "+
                           "WHERE "+
                           "  col2="+???)") 
        %>
    }
);

如何获取我可以在 where 子句中使用的下一列的值?

正在解决您的问题:

如果您查看官方 SlickGrid Editing 演示,您可以尝试以下操作以基本了解网格编辑的工作原理。打开您的 JS 调试器并使用以下命令订阅网格 onCellChange 事件:

grid.onCellChange.subscribe(
    function (e,args) {
        console.log('row: ' + args.row + ' cell: ' + args.cell)
    });

网格的 onCellChange 事件 args 参数对象包含两个属性:

  • 细胞

现在编辑任意单元格,保留刚刚编辑的单元格。这很重要,因为此事件只会在 blur 事件上触发。

在控制台日志中,您将看到例如:

row: 6 cell: 1

正在寻址您的数据对象

我发现的唯一方法是 address 您的数据源是 hackish 方式,仅使用 eval(). For further information about object property accessing you can check this 答案.


来自 Javascript 行话的一点:

使用给定的字段名属性名称寻址数据对象的实际eval()命令是:

eval('data[args.row]'+'.'+columns[args.cell].field)

简化后,它将评估表示为字符串的JavaScript代码,在这个SlickGrid Editing example中,它将变得就像你会写:

data[6].title

所以概念验证代码是:

grid.onCellChange.subscribe(
    function (e,args) {
        console.log(eval('data[args.row]'+'.'+columns[args.cell].field))
    });

这将为您 return 您当前编辑的单元格的值。例如,更改 args.cell+1 将 return 您的网格数据源中的下一个单元格值。当然,您应该始终检查 columns.length 属性 以将列索引键保持在数组边界内。


关于您对 updateDatabase 调用的想法: 为什么您要在每次触发此事件后更新数据库?我建议你看看官方的 Composite editor 演示,它有一个编辑表单。

我强烈建议的另一件事是你不要编写服务器端隐藏代码代码直接进入javascript代码块。例如,您可以使用 .

我推荐这个的原因是因为这样你就可以将函数与分开分开responsibilities. Just by adhering to this principle in itself could lead you to have a cleaner code, also you only give one reason to change. Also it may help testing你的函数更容易。