我有一个Kendo网格中显示的记录列表,我可以在线创建新记录。 要求是,每条记录都有唯一名称。
添加新记录时,我有此功能,遍历记录列表,并在添加记录之前检查新记录名称是否唯一。它作为kendo.ui.validator的扩展,为其添加自定义规则。功能:
//...
uniquenamevalidation: function (input, params) {
var errorCount = 0;
//check for the rule attribute
if (input.filter("[data-val-uniquenamevalidation]").length && input.val()) {
var dataSource = $("#grid").data("kendoGrid").dataSource;
var data = dataSource.data();
//iterating through all grid elements' Names, and comparing to input
for (var i = 1; i < data.length; i++) {
if (input.val() == data[i].Name) {
errorCount++; //if there are any matches, increase error count
}
}
}
console.log(errorCount == 0);
return errorCount == 0;//returns TRUE if there are no matches, therefore input is unique
}
当输入无效时,函数返回 false 并且验证应该失败,它会失败并显示正确的错误消息 http://snag.gy/d5TZR.jpg
问题: 当输入有效时,函数返回 true 并且验证应该传递,这个无法解释的错误出现并且不允许我继续。 http://snag.gy/syxds.jpg
答案 0 :(得分:0)
关于Telerik Demos,我注意到我在函数末尾错过了“return true”语句;看起来应该是这样的
uniquenamevalidation: function (input, params) {
var errorCount = 0;
//check for the rule attribute
if (input.filter("[data-val-uniquenamevalidation]").length && input.val()) {
var dataSource = $("#grid").data("kendoGrid").dataSource;
var data = dataSource.data();
for (var i = 1; i < data.length; i++) {
if (input.val() == data[i].Name) {
errorCount++;
}
}
return errorCount == 0;
}
return true;
}
看起来要验证每个字段,调用所有规则并传递单个字段的参数,然后由第一个if语句过滤 ,以及不关心关于这个领域的规则,只返回true。
不确定这是多么正确,但它现在正常工作,这是我能想到的唯一合乎逻辑的解释。