2015-04-08 4 views
0

У меня проблема с редактором ячейки сетки. У меня есть валидация для ячеек, и мне нужно предотвратить их фокус в случае ошибки проверки. Вот как я это делаю:Редактор ячейки ExtJS Grid, предотвращающий фокус, проблема с ошибкой

blur: function (field, event) { 
          if (field.value > field.maxValue || field.value < field.minValue) { 
           field.focus(); 
           return false; 
          } 
         }, 
specialkey: function (field, event) { 
          if (event.getKey() == 9) { 
           if (field.value > field.maxValue || field.value < field.minValue) { 
            field.focus(); 
            return false; 
           } 
          } 
         } 

Эта часть работает нормально за исключением случаев, когда вы пытаетесь нажать в любом месте вне сетки, или попытаться выбрать следующую ячейку с помощью Tab. Проблема в том, что если вы нажмете еще одну ячейку, я все равно потеряю фокус. Вот что показало отладка:

cell_1 - blur, cell_1 - focus, cell_2 - blur, cell_2 - focus 

Есть ли у кого-нибудь подобная проблема?
Также немного сбивает с толку, что если вы поместите точку останова в «размытие» слушателя, это сработает! Отладка покажет: cell_1 - размытие и другие события.

ответ

1

Вы должны сделать свое подтверждение в beforeedit случае cellediting плагин (по крайней мере, в ExtJS 4):

this.cellEditing = new Ext.grid.plugin.CellEditing({ 
     clicksToEdit : 1, 
     listeners : { 
      beforeedit : function (editor, e) { 
       // do your valdiation here : 
       return (e.record.get('your_field') != 'aaa'); 
      } 
     } 
    }); 

Если вы возвращаете ложь здесь отменит издание.

Смежные вопросы