javascript - 如何验证 dojo OnDemandGrid 中的编辑器字段

标签 javascript validation dojo dgrid

我构建了一个 dojo OnDemandGrid,其中有几个带有编辑器(NumberTextBox 和 FilteringSelect)的列,因此我可以修改网格中的值。我还在这些列上添加了一些验证,以帮助确保输入的值正确。这一切似乎都工作正常,当我输入无效值时,我收到指示该值不正确。

我的问题是当我尝试将此数据发送回服务器时。当我使用 ui.searchResultGrid.collection.data 获取网格数据时,任何无效字段都没有在集合中更新,并且仍然具有其原始值。我的猜测是,当单元格更新并保存时,它会进行验证,如果验证失败,它不会更新集合。我如何判断某些单元未通过验证并存在问题?

以下是我定义网格的方法(如果有帮助的话):

require(["dojo/_base/declare", "dgrid/OnDemandGrid", "dgrid/Keyboard", "dgrid/Selection", "dgrid/Editor", 
        "dgrid/extensions/ColumnResizer", "dgrid/extensions/DijitRegistry", "dijit/form/NumberTextBox", 
        "dijit/form/FilteringSelect", "dojo/_base/lang", "dojo/domReady!"],
    function (declare, OnDemandGrid, Keyboard, Selection, Editor, ColumnResizer, DijitRegistry, NumberTextBox, FilteringSelect, lang) {

        var CustomGrid = declare([OnDemandGrid, Keyboard, Selection, Editor, ColumnResizer, DijitRegistry]);
        ui.searchResultGrid = new CustomGrid({
            columns: {
                newItemAmount: {
                    label: "# of New Item",
                    editor: NumberTextBox,
                    editorArgs: {
                        constraints: {
                            min: 0.0001,
                            max: 999.9999,
                            allowNegative: false,
                            places: 4
                        },
                        style: "width:90px;",
                        required: true
                    },
                    autoSave: true,
                    resizable: false,
                    sortable: false,
                    width: 100
                },
                newItemUnitId: {
                    label: "Unit of New Item",
                    editor: FilteringSelect,
                    editorArgs: {
                        style: "width:130px",
                        searchAttr: "name",
                        labelAttr: "name",
                        required: true
                    },
                    autoSave: true,
                    resizable: false,
                    sortable: false,
                    width: 140
                }
            },
            selectionMode: "none",
            cellNavigation: false,
        }, "searchResultGrid");
    });

最佳答案

据我所知,您必须查看要验证的每个单元格并检查 .element.widget.isValid() 以查看该小部件是否通过验证。我编写了一个函数来验证带有参数的网格: grid - 要验证的网格 cols - 要验证的列名称的字符串数组

function gridValid(grid, cols) {
    for (var i = 0; i < grid.collection.data.length; i++) {
    var rowId = grid.collection.getIdentity(grid.collection.data[i])
    for (var c = 0; c < cols.length; c++) {
        if (!grid.cell(rowId, cols[c]).element.widget.isValid()) {
        return false;
        }
    };
    }
    return true;
}

我这样调用该函数:

if (gridValid(ui.searchResultGrid, ["newItemAmount", "newItemUnitId"])) {
    var toSave = ui.searchResultGrid.collection.data;
    //TODO: save the grid data
}

这可能不是验证网格的最佳方法,但它似乎有效。

关于javascript - 如何验证 dojo OnDemandGrid 中的编辑器字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32742682/

相关文章:

javascript - React/Redux 链接第二个 API 请求和调度

javascript - 有什么方法可以在javascript中包含条件吗?

javascript - 设置 ContentPane 内容时如何保留旧内容

java - 使用 Apache CXF 实现的 JAX-WS 服务上的 validator 错误

jquery - 使用 Jquery/CSS 更改负数的文本字段背景颜色

javascript - 如何在 jQuery 验证中检查元素是否具有类?

javascript - 如何将json数据发送到可序列化类

javascript - angular.run() 方法中的异步函数在 Controller 之前尚未执行

javascript - 获取元素的父div

javascript - 屏幕宽度取决于菜单切换和在 JavaScript 中自动打开