如何在KendoGrid /自定义验证器编辑中从Kendo模型访问ID?

时间:2015-04-16 16:19:32

标签: validation kendo-ui kendo-grid

我正在使用Kendo Grid / Custom验证器编辑来验证网格中的列,实际上我正在尝试检查数据库中是否已存在电子邮件?实现它我想得到行的ID。

例如在参考其产品表中给出的,所以在这种情况下我会在验证函数中获得ProductID吗?

参考: http://demos.telerik.com/kendo-ui/grid/editing-custom-validation

2 个答案:

答案 0 :(得分:2)

您可以通过检索uid然后通过dataSource.getByUid()从dataSource获取数据项来获取ID。网格中的每一行都有一个由网格生成的唯一uid

例如,参考剑道的演示,验证现在看起来像这样:

productnamevalidation: function (input) {
    //get row and uid
    var row = input.closest('tr')[0];
    var uid = $(row).attr('data-uid');

    //get data item and then its ProductID
    var dataitem = dataSource.getByUid(uid);
    console.log(dataitem);
    console.log(dataitem.ProductID);

    //continue doing validation
    if (input.is("[name='ProductName']") && input.val() != "") {
        input.attr("data-productnamevalidation-msg", "Product Name should start with capital letter");
        return /^[A-Z]/.test(input.val());
    }

    return true;
}

这是包含此代码的demo,您可以打开控制台,查看每个数据行是否正在打印出所有模型属性。

答案 1 :(得分:1)

您可以使用以下方式获取记录的ID:

input[0].kendoBindingTarget.source.ID

例如:

emailUnique: function (input) {
    if (input.is("[name=Email]") && input.val() !== "") {
        input.attr("data-emailUnique-msg", "Email already exists");
        return isEmailUnique(input.val(), input[0].kendoBindingTarget.source.ID);
    }
    return true;
}

奖励跟踪,以防对某人有用:

function isEmailUnique(val, id) {
    var data = YourGridDataSource; // If you don't have it, you may need something like $("#YourGrid").data().kendoGrid.dataSource
    for (var i = 0; i < data.length; i++) {
        if (data[i].ID != id && data[i].Email == val)
            return false;
    }
    return true;
}