【问题标题】:Kendo UI, How to manually call validate() on kendo grid cell剑道 UI,如何在剑道网格单元上手动调用 validate()
【发布时间】:2014-05-16 22:45:30
【问题描述】:

有没有办法在 kendo-grid 中的单元格上调用 validate() 而无需使用 editCell() 方法?

Telerik 团队推荐的验证器调用方式如下:

$("myGrid").data("kendoGrid").editable.validatable.validate()

但是,如果没有 cell open(例如,网格中没有焦点输入),则没有 editable 对象可用,因此我必须通过以下方式激活单元格一个调用 validate()

我想在每个网格单元上调用验证并运行一些逻辑(例如 addClass()

如果我 jquery 循环遍历网格中的所有 td 元素并调用 validate(),我会成功,如下所示:

    $(".k-grid-content td").each(function () {
            var cell = $(this);
            grid.editCell(cell);
            if (!grid.editable.validatable.validate()) {
                cell.addClass("cell-invalid");                 
            };
            grid.closeCell(cell);
        });

然而,这段代码并不优雅,而且速度非常慢

我想要实现的是网格验证提交时

问题:我可以在每个网格单元上运行剑道验证器,而无需重复进入和离开编辑模式吗?

PS:我使用的是批量编辑(incell)模式

【问题讨论】:

    标签: javascript jquery validation kendo-ui kendo-grid


    【解决方案1】:

    我对此进行了更深入的研究,但无法在网格文档中找到本机支持此批验证的任何内容。通常,网格格式旨在逐行处理数据,这反映了关系数据库表/电子表格类型的数据表示。考虑到这一点,典型的插入/编辑/验证/删除操作旨在一次对单行或记录执行。

    我的回答是:不。如果不重复进入和离开每个需要验证的单元格的编辑模式,您将无法运行 Kendo 验证。

    如果您可以深入研究 Kendo JS 库并准确了解如何调用验证,并创建一些自定义方法以批量方式调用它,您也许可以做到。下一次剑道更新发布后,类似的东西可能会中断。

    为了加快速度,您可能必须想出一个聪明的方法来验证输入的数据;或blur;或使用setTimeout 作为“背景”任务;或将数据打包并通过 Ajax 发送回服务器,然后以某种方式处理返回消息。

    祝你好运!

    【讨论】:

    • 浏览器 JavaScript 不支持使用 setTimeout 的多线程。按照建议重复调用 setTimeout 只会让事情以一种只能防止 UI 冻结的方式运行。
    • 这不是对多线程的引用。我的想法更像是在用户与表单的交互中使用暂停来验证字段。我并不是说这是一个好的解决方案,我的总体观点是它需要一些“hackey”解决方法才能使其工作。
    猜你喜欢
    • 2015-11-11
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    相关资源
    最近更新 更多