【问题标题】:How to validate an editor field in a dojo OnDemandGrid如何验证 dojo OnDemandGrid 中的编辑器字段
【发布时间】:2015-09-23 14:43:50
【问题描述】:

我已经构建了一个 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");
    });

【问题讨论】:

    标签: javascript validation dojo dgrid


    【解决方案1】:

    据我所知,您必须查看要验证的每个单元格并检查 .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
    }
    

    这可能不是验证网格的最佳方式,但它似乎可以工作。

    【讨论】:

    • 如果有足够的行以致某些行在验证时未呈现,则此方法不起作用,因为它是OnDemandGrid。对于未渲染的行,grid.cell(rowId, cols[c]).element 将是未定义的。
    猜你喜欢
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多