2015-11-02 48 views
0

我想让我的代码能够在单元格更改时立即更新数据库表。但是,我可以得到更改的单元格的值,而不是下一个单元格的数据。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子句中使用下一列的值?

回答

5

解决您的问题:

如果检查出的官方SlickGrid Editing演示,你可以试试下面得到一个基本的了解电网的编辑是如何工作的。打开你的JS调试器,并使用以下命令订阅电网onCellChange事件:

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

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

  • 细胞

现在编辑任何单元格,并且离开刚刚编辑的单元格。这一点很重要,因为此事件只会在模糊事件中触发。

在控制台登录,您将例如看到:

行:6格:1

解决您的数据对象

我发现怎么会只有这样,你地址你的数据来源是在hackish方式只使用eval()。有关对象属性访问的更多信息,您可以检查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)) 
    }); 

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


关于你提到的有关updateDatabase呼叫想法:你为什么要更新每次经过此事件被解雇的数据库?我建议你看看有编辑表格的官方Composite editor演示。

其他的事情,我会强烈建议是,你不服务器或后面直接代码代码到的javascript代码块。例如,您可以使其使用ajax post

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

相关问题