跨领域的剑道网格验证

时间:2013-09-12 14:44:19

标签: kendo-ui

我正在尝试创建一些验证规则,以验证不同的字段。

我希望能够有规则" DateClosed必须晚于DateOpen",但是当我使用自定义验证功能时,它只传递DateClosed的数据。如何将dateOpen信息输入验证函数?

数据来源:

schema: {
        model: {
            id: "SomeId",
            fields: {
                 SomeId: { editable: false, nullable: true },
                 Name: { editable: false, validation: { required: false } },
                 Description: { validation: { required: false } },
                 DateOpen: { type: "date", validation: { required: true } },
                 DateClosed: { type: "date", validation: { required: false, validationMessage: "Date Closed must be after Date Opened", custom: testValidation } },
               }
           }
         }

验证功能:

            function testValidation(element) {
                if (element[0] !== null) {
                    if (element[0].name === "DateClosed") {
                       //Date logic here
                        return false;
                    }
                    else
                        return true;
                }
            }

1 个答案:

答案 0 :(得分:1)

发现这很有趣所以这里是我的两分钱(我想你已经摆脱了这个问题,实际上):

在编辑网格(批量编辑)时,用户在验证时选择的值尚未保存在dataSource上,是在单元格(脏单元格)上引用的内存上。所以,你必须得到dom中另一个字段的值。更安全的方法是通过了解列索引来查找所需的单元格。硬编码从来都不是一个好主意。所以......

var testValidation = function(element) {
    var columnIndex = 0;
    var grid = $("#grid").data("kendoGrid");

    for (columnIndex; columnIndex < grid.columns.length; columnIndex++)
    {
        if (grid.columns[columnIndex].field == "DateOpen")
        {
            break;            
        }
    }

    var dateClosed = $(element).data("kendoDatePicker").value();
    var dateOpen = (new Date($(element).closest("tr").find("td:eq(" + columnIndex + ")").text()));

    return (dateOpen < dateClosed);
}

首先它通过循环获取列,然后是它的文本并将其评估为Date对象。完成后,只需检查dateOpen < dateClosed

我希望这会有所帮助。 Fiddle