我正在尝试创建一些验证规则,以验证不同的字段。
我希望能够有规则" 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;
}
}
答案 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