5

我正在使用带有 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;博士:我的问题,重申,是我想保留无效值,但仍然有验证显示它周围的红色框。我确信它是可能的,但它是如何完成的?

我试过的:

  1. 我研究了Ext.Editor,它看起来很有希望,因为它有一个名为revertInvalid的配置属性,它完全符合我的要求。不幸的是,似乎CellEditing插件似乎没有使用Ext.Editor。我尝试在网格列的编辑器字段中提供Ext.Editor,但这会产生不可编辑的文本。
  2. 我已经尝试将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});                           
                }
           }]
    }
4

3 回答 3

1

这对我有用(Extjs 4.2):

Ext.override(Ext.Editor, { revertInvalid: false });
于 2013-05-14T14:15:12.233 回答
0

http://www.sencha.com/forum/showthread.php?271318-Ext.Editor-revertInvalid-false-what-is-the-expected-behavior&p=994118#post994118

对我来说,这是 ExtJs 中的一个错误,您可以通过覆盖 Ext.editor 的 completeEdit 函数来修复它

于 2013-09-04T12:06:07.187 回答
0

很可能 Sencha 还没有完全开发revertInvalid字段,而且它的简单功能还不能工作。对于那些寻找解决方法的人,您可能不得不弄乱网格单元本身的 CSS 以将其自定义标记为无效。

于 2012-12-28T13:06:04.050 回答