具有CellEditing的ExtJs 4 GridPanel:输入的数据在验证失败时丢失

时间:2012-08-06 18:36:21

标签: javascript validation extjs4 editing gridpanel

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

我尝试了什么:

  1. 我查看了 Ext.Editor ,看起来很有希望,因为它有一个名为 revertInvalid 的配置属性,完全我想要的东西。不幸的是,似乎 CellEditing 插件似乎没有使用 Ext.Editor 。我尝试在网格列的编辑器字段中提供 Ext.Editor ,但这会生成不可编辑的文本。
  2. 我尝试过无处不在的地方放置 revertInvalid ,但这总是很远的。

  3. 代码:

        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});                           
                    }
               }]
        }
    

3 个答案:

答案 0 :(得分:1)

这对我有用(Extjs 4.2):

Ext.override(Ext.Editor, { revertInvalid: false });

答案 1 :(得分:0)

很可能Sencha尚未完全开发 revertInvalid 字段,并且其简单的功能尚不起作用。对于那些寻找解决方法的人来说,你可能不得不弄乱网格单元格的CSS来自定义标记为无效。

答案 2 :(得分:0)

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

对我而言,你可以通过覆盖Ext.editor的completeEdit函数来修复ExtJs中的错误