如何验证单元格中的更改并确定是否应该进行更改?

时间:2013-04-16 22:42:58

标签: javascript validation error-handling slickgrid

我有类似的东西:

 CELL #0      CELL #1
------------------------
|start_date | end_date |
|----------------------|
|1/1/2012   |1/1/2013  |  ROW#0
|----------------------|

我想断言,如果用户点击(Row0,Cell0)并尝试更改开始日期,则开始日期必须小于结束日期,否则更改不会通过。这可能吗?

目前在创建列时,我添加了一个'validator'属性并传入下面的函数

startDateValidator(value){ 
   /* value is new value, need to reference the end_date to make sure
      that value < end_date but not possible in this column validator */
}

但是正如评论指出的那样,我们获得了新值但没有引用旧数据项。有办法解决这个问题吗?我可以更改源代码,但如果可能的话,我希望避免使用。

2 个答案:

答案 0 :(得分:1)

可以在网格的onCellChange事件上执行此操作,我从之前的实现中删除了一些代码,所以如果第一次不能正常工作,请不要太难。假设您的日期ID都是start_dateend_date,那么这是一个有效的概念:

grid.onCellChange.subscribe(function(e,args) {
    // do a proper validation of date
    if (args.item.start_date < args.item.end_date) {
        // post/save result to DB and re-render the grid
        $.post('yourAjaxFile.php?action=update', args.item, function(ServerResponseUpt) {   
            // success, update the datagrid view on screen
            grid.updateRow(args.row);
            grid.updateRowCount();
            grid.render();
        });
    }else {
        // invalid, undo the changes from grid, this will put back orginal value
        var command = commandUndoQueue.pop();
        if (command && Slick.GlobalEditorLock.cancelCurrentEdit()) {
            command.undo();
            grid.gotoCell(command.row, command.cell, false);
        }                     
    }                         
});

请注意,日期验证在这里显然是不正确的,但主要答案更侧重于如何实现其余的事件

答案 1 :(得分:0)

使用OnBeforeEdit代替onCellChange

grid.onBeforeEditCell.subscribe(function (e, args) {
    //returning true will update the cell and returning false will not update it
}