Kendo层级Grid detail模板子表格阻止name字段重复录入方案咨询
解决方案
你可以通过校验函数的input元素向上追溯动态生成的子Grid实例,无需绑定固定ID即可获取当前编辑行数据,修改子Grid中name字段的duplicate校验逻辑如下:
duplicate: function (input) { if (input.is("[name='name']") && input.val() != "") { var inputName = input.val(); // 从input向上查找当前子Grid实例 var childGrid = input.closest(".k-grid").data("kendoGrid"); // 获取当前编辑行的模型数据 var editingModel = childGrid.editable.options.model; // 获取当前父分组下的所有课程数据 var currentCourses = childGrid.dataSource.data(); var isValid = true; for (var i = 0; i < currentCourses.length; i++) { var course = currentCourses[i]; // 排除当前编辑的行,用ID比对比name更精准,避免同名编辑时误判 if (course.name === inputName && course.id !== editingModel.id) { isValid = false; input.attr("data-duplicate-msg", "Duplicates not allowed."); break; } } return isValid; } return true; }
逻辑说明
- 通过
input.closest(".k-grid")定位子Grid,适配所有动态生成的层级子Grid,不需要提前指定固定ID - 改用ID比对排除当前编辑项,比仅比对name更稳妥,避免两条数据name相同的场景下出现校验误判
- 修正了原有逻辑中循环从i=1开始漏掉第一条数据校验的问题
内容的提问来源于stack exchange,提问作者IntelligentCancer
相关产品推荐
相关产品推荐

