【问题标题】:Slickgrid - how to get the value of edited cells?Slickgrid - 如何获取已编辑单元格的值?
【发布时间】:2015-11-02 23:45:28
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript slickgrid


    【解决方案1】:

    解决您的问题:

    如果您查看官方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 答案。


    有点来自 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

    我推荐这个的原因是因为你将使用 separated responsibilities 分隔函数。仅仅坚持这个原则本身就可以让你有一个更干净的代码,你也只给出一个改变的理由。它还可以帮助testing 您的功能更轻松。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      • 2012-08-18
      相关资源
      最近更新 更多