Jam*_*mes 0 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="+???)")
%>
}
);
Run Code Online (Sandbox Code Playgroud)
如何获取我可以在where子句中使用的下一列的值?
解决你的问题:
如果您查看官方的SlickGrid编辑演示,您可以尝试以下方法来基本了解网格编辑的工作原理.打开JS调试器并onCellChange使用以下命令订阅网格事件:
grid.onCellChange.subscribe(
function (e,args) {
console.log('row: ' + args.row + ' cell: ' + args.cell)
});
Run Code Online (Sandbox Code Playgroud)
grid的onCellChangeevents args参数对象包含两个属性:
现在编辑任何单元格并离开刚刚编辑过的单元格.这很重要,因为此事件只会触发模糊事件.
在控制台日志中,您将看到例如:
行:6个单元格:1
寻址您的数据对象:
我发现如何解决您的数据源的 唯一方法是使用hackish方式eval().有关对象属性访问的更多信息,您可以检查此答案.
有点来自Javascript术语:
eval()使用给定的fieldname或属性名称来处理数据对象的实际命令是:
eval('data[args.row]'+'.'+columns[args.cell].field)
Run Code Online (Sandbox Code Playgroud)
简化它将评估表示为字符串的JavaScript代码,在此SlickGrid编辑示例中,它将变得像您要编写的那样:
data[6].title
Run Code Online (Sandbox Code Playgroud)
所以概念证明代码是:
grid.onCellChange.subscribe(
function (e,args) {
console.log(eval('data[args.row]'+'.'+columns[args.cell].field))
});
Run Code Online (Sandbox Code Playgroud)
这将返回当前编辑的单元格的值.例如,更改args.cell+1将返回网格数据源中的下一个单元格值.当然,您应该始终检查columns.length属性以将列索引键保留在数组边界内.
关于您对该updateDatabase调用的想法:为什么您希望在每次触发此事件后更新数据库?我建议你看一下具有编辑表格的官方复合编辑器演示.
我强烈建议的另一件事是你不要将代码服务器端或代码直接写入javascript代码块.例如,您可以使用ajax帖子.
我推荐这个的原因是因为那时你将分离出具有独立 职责的功能.只要坚持这个原则本身就可以让你有一个更清晰的代码,你也只能给出一个改变的理由.此外,它可以帮助您更轻松地测试您的功能.
| 归档时间: |
|
| 查看次数: |
1623 次 |
| 最近记录: |