我想找到一种方法来获取制表器验证回调以将数据设置到单元格。解释我的用例:
我有一个单元格,希望用户能够输入数据。我的自定义验证程序确保输入的数据在选项列表中匹配。当前输入的数据必须区分大小写,因为我希望输入的数据遵循某种格式。
我的目标: 允许用户输入数据,例如“ bob”。验证失败,并且验证回调发现“ Bob”存在小写字母匹配,因此单元格值应为“ Bob”。
我认为我已经完成了90%的工作,我已经具备了设置回调值的所有逻辑,但是看来我可能以一种不好的方式破坏了制表符。该单元格看起来仍处于编辑模式(但是失去了焦点,单元格周围有一个红色框)。
我的验证者代码:
var validCheck = function (cell, value, parameters) {
return (AllowedVals.map(function (v) { return v.name;
})).includes(value);
}
我的验证程序回调:
validationFailed:function(cell, value, validators){
if (AllowedVals.map(function (v) { return v.name.toLowerCase(); }).includes(value.toLowerCase())) {
var match = AllowedVals.filter(function (allowedVal) { return allowedVal.name.toLowerCase() == value.toLowerCase() });
cell.setValue(AllowedVals[0].name);
}
},
通过验证回调更新单元格后,我无法再编辑该单元格,永远不会调用cellEdited方法,并且Chrome Dev Console中存在很多错误(总共48个)。我有“超出了最大调用堆栈大小”和“未捕获的DOMException:无法在'Element'上设置'innerHTML'属性:要删除的节点不再是该节点的子节点。也许已将其移动为'blur'事件处理程序?”
这使我相信制表符陷入了某种验证循环。有人可以帮助我找到正确的方式来获得我想要的行为吗?
答案 0 :(得分:0)
这里是变量。
我将验证设置为不区分大小写的匹配项。
var validCheck = function (cell, value, parameters) {
return (AllowedVals.map(function (v) { return v.name.toLowerCase();
})).includes(value.toLowerCase());
}
然后创建了一个变量,如果发现不区分大小写的匹配项,则返回正确的大小写。
var Mutate = function(value, data, type, params, component){
if (AllowedVals.map(function (v) { return v.name.toLowerCase(); }).includes(value.toLowerCase())) {
var match = AllowedVals.filter(function (allowedVal) { return allowedVal.name.toLowerCase() == value.toLowerCase() });
return match[0].name;
}
else {
return value;
}
}
最后,它会将正确的数据发布到我的服务器上,并立即使用突变的数据更新网格视图(额外奖金)。