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

时间:2015-11-02 23:45:28

标签: javascript slickgrid

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

方法我已经尝试过但没有成功:

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子句中使用的下一列的值?

1 个答案:

答案 0 :(得分:5)

解决您的问题:

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

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

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

  • 细胞

现在编辑任何单元格,离开刚刚编辑过的单元格。这很重要,因为此事件只会触发 blur 事件。

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

  

行:6个单元格:1

寻址您的数据对象

我发现,只有使用eval() hackish 的方式,我才能找到地址您的数据源的唯一方法。有关对象属性访问的更多信息,您可以查看this answer。

来自Javascript术语的一点:

使用给定 fieldname 属性名称来解决数据对象的实际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))
    });

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

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

我强烈建议的另一件事是你直接将服务器端代码代码写入 javascript < / em>代码块。例如,您可以使用ajax post

我建议这样做的原因是因为那时你将使用分隔 responsibilities分开函数。只要坚持这个原则本身就可以让你有一个更清晰的代码,你也只能给出一个改变的理由。此外,它可以帮助testing您的功能更轻松。