我构建了一个 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/