ExtJs 4 GridPanel с CellEditing: введенные данные теряются при неудачной проверке

Я использую ExtJs Grid с плагином CellEditing. Он работает отлично, за исключением того, что недопустимые значения теряются, когда он не проходит проверку, которую я на него наложил.

Например, если у меня есть редактируемое текстовое поле в сетке, которое не допускает значений более 10 символов, и пользователь вводит «olympicssucks», проверка завершится ошибкой, и вокруг текстового поля появится красный прямоугольник. Когда пользователь щелкнет за пределами поля, значение "olympicssucks" будет потеряно.

Я хочу, чтобы сетка по-прежнему сохраняла недопустимые данные и сохраняла вокруг них красную рамку.

Другой (возможно, более понятный) пример: http://dev.sencha.com/deploy/ext-4.0.0/examples/grid/cell-editing.html Попробуйте изменить значение первой ячейки: "Язык гадюки" и сделать его пустым. . Обратите внимание на красное поле и сообщение о проверке. Теперь нажмите из коробки. Неудачная проверка вернет ячейке первоначальное значение, язык гадюки.


tl;dr: Мой вопрос, переформулированный, заключается в том, что я хочу сохранить недопустимое значение, но при этом иметь проверку, отображающую красную рамку вокруг него. . Я уверен, что это возможно, но как это сделать?

Что я пробовал:

  1. Я изучил Ext.Editor, и он кажется многообещающим, поскольку у него есть свойство конфигурации с именем revertInvalid, которое делает точно то, что я хочу. К сожалению, плагин CellEditing не использует Ext.Editor. Я попытался указать Ext.Editor в поле 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});                           
                }
           }]
    }

person applepie    schedule 06.08.2012    source источник
comment
Когда вы закончите редактирование ячейки, она сохранит значение в хранилище. А сетка — это представление магазина. Вы можете поиграть с css самой ячейки (например, пометить ее как красную при сохранении), но вы не можете использовать традиционную функцию проверки. (что я знаю по крайней мере)   -  person Alex    schedule 07.08.2012
comment
Спасибо за ваш ответ. Я боюсь, что мне придется пройти через надоедливые обходные пути. Просто, увидев, что revertInvalid — это ТОЧНО то, что я хотел, я надеялся, что есть что-то подобное для GridPanel и CellEditing.   -  person applepie    schedule 07.08.2012


Ответы (3)


Это сработало для меня (Extjs 4.2):

Ext.override(Ext.Editor, { revertInvalid: false });
person MatteoSp    schedule 14.05.2013
comment
не могли бы вы опубликовать короткий фрагмент на jsfiddle? Я хотел бы это проверить, но у меня нет доступа к старой кодовой базе, над которой я работал. - person applepie; 19.07.2013
comment
извините, код взят из очень сложного и очень динамичного решения для создания пользовательского интерфейса, которое поддерживает ERP. действительно трудно извлечь фрагмент - person MatteoSp; 20.07.2013

Очень может быть, что Sencha еще не до конца разработал поле revertInvalid, и его простая функциональность еще не работает. Для тех, кто ищет обходной путь, вам, возможно, придется возиться с CSS самой ячейки сетки, чтобы пометить ее как недействительную.

person applepie    schedule 28.12.2012
comment
Я так не думаю, в документации указано: Доступно с: 1.1.0. - person MatteoSp; 14.05.2013

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

для меня это ошибка в ExtJ, которую вы можете исправить, переопределив функцию completeEdit Ext.editor

person Christophe Blin    schedule 04.09.2013