我正在使用带有 CellEditing 插件的 ExtJs Grid。它工作得很好,只是当我对其施加的验证失败时无效值会丢失。
例如,如果我在网格中有一个不允许超过 10 个字符的值的可编辑文本字段,并且用户输入“ olympicssucks ”,则验证将失败,并且文本字段周围会出现一个红色框。当用户点击字段外的值“ olympicssucks ”将丢失。
我希望网格仍然保存无效数据,并在其周围保留红色框。
另一个(可能更清楚)示例: http ://dev.sencha.com/deploy/ext-4.0.0/examples/grid/cell-editing.html 尝试编辑第一个单元格值:“ Adder's-Tongue ”并将其设为空. 注意红色框和验证消息。现在点击开箱即用。验证失败会将单元格恢复为其原始值Adder's -Tongue。
tl;博士:我的问题,重申,是我想保留无效值,但仍然有验证显示它周围的红色框。我确信它是可能的,但它是如何完成的?
我试过的:
- 我研究了Ext.Editor,它看起来很有希望,因为它有一个名为revertInvalid的配置属性,它完全符合我的要求。不幸的是,似乎CellEditing插件似乎没有使用Ext.Editor。我尝试在网格列的编辑器字段中提供Ext.Editor,但这会产生不可编辑的文本。
- 我已经尝试将revertInvalid放置在任何我能做的地方,但这总是很遥远。
代码:
var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', {
clicksToEdit: 1
});
var grid = {
xtype: 'grid', store: dataStore, plugins: [cellEditing],
columns: [
{
text: 'Items', dataIndex: 'items', flex: 1, sortable : false,
editor: {
xtype: 'textfield',
validator: function(value) { //custom validator to return false when value is empty and other conditions}
},
//...
],
tbar: [{
xtype: 'button', text: 'Add ' + type,
handler: function() {
dataStore.insert(0, {items: 'New ' + type});
cellEditing.startEditByPosition({row: 0, column: 0});
}
}]
}