我有类似的东西:
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 */
}
但是正如评论指出的那样,我们获得了新值但没有引用旧数据项。有办法解决这个问题吗?我可以更改源代码,但如果可能的话,我希望避免使用。
答案 0 :(得分:1)
可以在网格的onCellChange
事件上执行此操作,我从之前的实现中删除了一些代码,所以如果第一次不能正常工作,请不要太难。假设您的日期ID都是start_date
和end_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 }