2013-11-21 4 views
0

У меня есть сетка, где плагин для ввода ячеек на месте, я отправляю данные через прямое событие.extjs getChangedData() не включает в себя последнюю отредактированную запись

У меня есть кнопка сохранения чуть ниже сетки, которая отправляет прямое событие.

Все хорошо работает за исключение следующего сценария:

Если я нажимаю кнопку сохранить во время редактирования строки, то getChangedData не считает, что ряд загрязнен.

Если я поставил предупреждение между ними (в предыдущем случае), он работает как ожидалось, но это не вариант. Я пробовал все возможные хаки, например, отправлял событие onblur активного элемента, показывая waitmsg, программно устанавливая фокус где-то в другом месте, но ничего не помогает.

Ищет помощь.

Приветствия,

АВИНАШ

ответ

0

Попробуйте добавить этот скрипт на сохранить обработчик кнопки.

//get the current selected row of your grid 
var selectedRecord = gridpanel.getSelectionModel().getSelection()[0]; 
var selectedRow = gridpanel.store.indexOf(selectedRecord); 

//get the index of selected row 
var idx = selectedRow <= -1 ? (gridpanel.store.getCount() - 1) : selectedRow; 


gridpanel.plugins[0].startEditByPosition({ 
          row: idx, 
          column: columnNumberWithEditor}); 

//proceeed to saving data 

startEditByPosition запустит edit событие.

Обязательно обработайте событие edit на свой плагин cellEditing.

listeners : { 
    'edit' : function(editor, e) { 
     e.record.commit(); 
    } 
} 
+0

Спасибо за помощь, я попробовал, но это не сработало, я хотел бы объяснить далее. Сценарий заключается в том, что я в редакторе столбцов, и вместо того, чтобы щелкнуть за пределами редактора, чтобы пометить запись, я просто нажимаю кнопку сохранения. Теперь, когда я проверяю на стороне сервера, я не получаю запись, которая редактировалась, прежде чем перейти к кнопке сохранения. – asolvent

+0

Хм .. пытались ли вы прослушать событие «edit» cellEditing? см. мой обновленный ответ. – wens

+0

К сожалению, это не сработало.Похоже, это по дизайну. – asolvent

0

У меня была такая же проблема, когда я пытался редактировать свою сетку в IE7 (не проблема с Chrome).

Я думаю, проблема заключается в том, что мой обработчик событий с сохранением кнопки называется BEFORE, когда событие onBlur может передать ячейке редактирования, чтобы завершить редактирование и поместить его значение в хранилище.

Что я сделал, чтобы обойти это было:

(1) Определение моей панели редактора сетки отдельно.

var myPanelGridEditor = Ext.create('Ext.grid.plugin.CellEditing', { 
    ptype: 'cellediting', 
    clicksToEdit: 1 
    }); 

(2) Определите мою панель сетки, которая включает в себя мой редактор сетки в плагинах.

var myGrid = Ext.create('Ext.grid.Panel', { 
    id: 'myPanelGrid', store: myStore, viewConfig: {markDirty: false}, 
    columnLines: true, 
    columns: [ 
     {header: 'HE01', dataIndex: 'vp01', sortable: false, maxWidth: 40, field: {xtype: 'numberfield', minValue: 0, hideTrigger: true, decimalPrecision: 4 }}, 
     {header: 'HE02', dataIndex: 'vp02', sortable: false, maxWidth: 40, field: {xtype: 'numberfield', minValue: 0, hideTrigger: true, decimalPrecision: 4 }} 
    ], 
    selModel: Ext.create('Ext.selection.RowModel', {mode: 'SINGLE'}), 
    plugins: [myPanelGridEditor], 
    height: 73, width: 1010, margin: '0 0 12 30' 
    }); 

(3) Добавить вызов completeEdit() в кнопке моего сохранить обработчик события

{ 
    text: 'Save', 
    formBind: true, 
    id: 'saveButton', 
    handler: function() { 
    myPanelGridEditor.completeEdit();   
    ... 
    } 
} 

В теории вы должны быть в состоянии назвать

myGridPanel.editingPlugin.completeEdit(); 

в вашем спасти обработчиком но в Ext JS 3.3.1 это свойство было null.

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