0

我有一个显示在 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

4

1 回答 1

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。

不知道这有多正确,但它现在工作正常,这是我能想到的唯一合乎逻辑的解释。

于 2014-12-30T06:15:48.977 回答