2

我正在尝试创建一些跨不同字段进行验证的验证规则。

我希望能够拥有规则“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;
                }
            }
4

1 回答 1

2

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

当您编辑网格(批量编辑)时,用户在验证时选择的值尚未保存在数据源上,而是在单元格(脏单元格)上引用的内存中。因此,您必须获取 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.

我希望这有帮助。小提琴

于 2014-09-03T19:11:12.690 回答