Kendo jQuery 内联网格验证未按需要工作

Kendo jQuery Inline Grid Validation is not working as needed

我正在尝试使用 KENDO UI 来验证网格行中的 2 个值。 这 2 个值,HOURS 和 COUNT 是互斥的,所以如果它们的值都 > 0,我想发出错误信号。

我有两个行为问题:

  1. 显示错误“不允许使用小时数和计数”,但它仅在第二次重复错误输入时触发。 输入示例:小时/计数 1 0(好) 1 1(应该导致错误) 1 2(这会触发所需的错误)
  2. 错误显示后,我无法确定如何删除它。如果我将输入之一的数据设置改回零,错误仍然存​​在。

我正在使用函数 FCTest 进行验证,但我只能假设我需要再次调用它,或者以不同的顺序调用它以更正时间。

谢谢, 罗伯特

我的代码:

<!DOCTYPE html>

<!-- TEST -->
<html>
<head>
    <base href="http://demos.telerik.com/kendo-ui/grid/editing-custom-validation">
    <style>html { font-size: 14px; font-family: Arial, Helvetica, sans-serif; }</style>
    <title></title>
    <link rel="stylesheet" href="//kendo.cdn.telerik.com/2016.2.504/styles/kendo.common-material.min.css" />
    <link rel="stylesheet" href="//kendo.cdn.telerik.com/2016.2.504/styles/kendo.material.min.css" />

    <script src="//kendo.cdn.telerik.com/2016.2.504/js/jquery.min.js"></script>
    <script src="//kendo.cdn.telerik.com/2016.2.504/js/kendo.all.min.js"></script>
</head>
<body>
    <div id="grid"></div>

    <script>
 $(document).ready(function () {
     dataSource = new kendo.data.DataSource({
                    data: [
                        { id: 1, count: 1, hours: 0},
                        { id: 2, count: 0, hours: 1},
                    ],

                    pageSize: 20,
                    schema: {
                        model: {
                            id: "id",
                            fields: {
                                id: { editable: false },

                                count: {editable: true,type: "number",
                                        validation:{
                                                    required:true,
                                                    maxlength:"3",
                                                    FCValid: FCTest}},

                                hours: {editable: true, type: "number",
                                    validation:{required:true,
                                        maxlength:"2"}}}
                            }
                        }
     });


        $("#grid").kendoGrid({
            dataSource: dataSource,
            pageable: true,
            height: 550,
            toolbar: ["create"],
            columns: [
                {field: "id", title: "ID", format: "{0:c}", width: "120px"},
                {field: "count", title: "Count", width: "120px"},
                {field: "hours", title: "Hours", width: "120px"},
                {command: ["edit", "destroy"], title: "&nbsp;", width: "250px"}],
            editable: "inline"
        });

 }); // end document ready


        function FCTest(input) {
            var row = input.closest("tr");
            var grid = row.closest("[data-role=grid]").data("kendoGrid");
            var dataItem = grid.dataItem(row);

            // if (parseFloat(input.val()) <= .1) {
            //     input.attr("data-FCValid-msg", "Decimals not allowed");
            //     return false;
            // }
            console.log({row});
            console.log({dataItem});
            console.log(dataItem.hours);
            console.log(dataItem.count);

            if (parseFloat(dataItem.hours) > 0 && (parseFloat(dataItem.count) > 0)) {
                input.attr("data-FCValid-msg", "Both Hours and Count are not allowed");
                return false;
            }

            if (parseFloat(dataItem.hours) == 0 && (parseFloat(dataItem.count) == 0)) {
                input.attr("data-FCValid-msg", "Must contain one Frequency value: Hours or Count");
                return false;
            }

            return true;

        }
    </script>





</body>
</html> 

订阅cellClose,检查传入的模型是否不是新行,然后检查值是否满足您的条件:

cellClose: function(e) {
  if (!e.model.isNew()) {
    if (e.model.count > 0 && e.model.hours > 0) {
      kendo.alert('Both Hours and Count are not allowed');
    } else if (e.model.count == 0 && e.model.hours == 0) {
      kendo.alert('Must contain one Frequency value: Hours or Count');
    }
  }
}

道场:https://dojo.telerik.com/oxAkUpAs