2012-02-14 5 views
0

У меня есть сетка, которая позволяет встроенное редактирование столбца. В этом столбце используется редактор combobox, и ни событие «change», ни событие «select» не дают мне возможность использовать обратное отредактированное значение, чтобы получить измененную строку из сетки.Получение модели из GridPanel в ExtJS

Я считаю, что Ext поплавки выпадающий редактора поэтому поэтому я не могу сделать что-то простое, как

combo.up() 

Для возврата к сетке.

Вот панель сетки с точки зрения:

{ 
    xtype: 'gridpanel', 
    title: 'Important Projects', 
    id: 'importantProjectsGrid', 
    dockedItems: [], 
    flex: 1, 
    columns: [ 
     { header: 'Quote Name', dataIndex: 'QuoteName', flex: 4 }, 
     { header: 'Quote Status', dataIndex: 'QuoteStatusID', flex: 6, editor: { 
      xtype: 'combobox', 
      editable: false, 
      action: 'QuoteStatus', 
      selectOnTab: true, 
      store: 'statuses', 
      queryMode: 'local', 
      displayField: 'Description', 
      valueField: 'Description' 
     } } 
    ], 
    store: 'myimpprojects', 
    selModel: { 
     selType: 'cellmodel' 
    }, 
    plugins: [Ext.create('Ext.grid.plugin.CellEditing', { 
     clicksToEdit: 1 
    })] 
} 

Вот код контроллера, относящиеся к этому:

init: function() { 
    this.control({ 
     '[action=QuoteStatus]': { 
      change: function (combo, new_value, old_value, opts) { 
       // I need to go back up from this combobox 
       // to get the row that this value was edited in 
       // to grab an ID value from that row's data 
       // in order to make an ajax request 
      } 
     } 
    }); 
}, 

Спасибо за любую помощь!

ответ

1

Попробуйте положить слушателя на плагин CellEditing. Существуют события для beforeedit, edit и validateedit, которые получают объект, содержащий ссылки на сетку, индексы записи, поля, строки и столбца и т. Д. Вы должны уметь проверять наличие комбобокса в обработчике событий и обрабатывать информацию оттуда.

Быстрая ссылка на страницу дока: Ext.grid.plugin.CellEditing

+0

Спасибо, что ответили, это похоже на то, что им нужно – thinkdevcode

2

Вы можете наблюдать за состоянием магазина update.

init: function() { 
    this.getMyimpprojectsStore().on('update', function(store, record) { 
     // do something with record 
    }); 
    // ... 
}, 
1

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

Пример настроенного прокси:

Ext.define('MyApp.store.YourStore', { 
extend: 'Ext.data.Store', 

model: 'MyApp.model.YourGridModel', 
autoSync: true, //Commits the changes realtime to the server 
proxy: { 
    type: 'ajax', 
    batchActions : true, //Commits the changes everytime a value is changed if true o otherwise store the changes and batch update them in 1 single post 
    api: { 
     read: 'path/to/select', 
     create: 'path/to/create', 
     update: 'path/to/update', 
     destroy: 'path/to/delete' 
    }, 
    reader: { 
     type: 'json', 
     root: 'results', 
     successProperty: 'success' 
    }, 
    writer: { 
     type: 'json', 
     writeAllFields: true 
    }, 
    listeners: { 
     exception: function(proxy, response, operation){ 

      Ext.MessageBox.show({ 
       title: 'REMOTE EXCEPTION', 
       msg: operation.getError(), 
       icon: Ext.MessageBox.ERROR, 
       buttons: Ext.Msg.OK 
      }); 
     } 
    } 
}, 
listeners: { 
    write: function(proxy, operation){ 

     var response = Ext.JSON.decode(operation.response.responseText); 

     if(response.success == true) 
     {   
      //TODO: Proxy - Messageboxes might be a little anoying we might instead use the status bar in teh grid or something so show status of the operation 
      Ext.MessageBox.show({ 
       title: this.xFileLibraryTitle, 
       msg: response.message, 
       icon: (response.success == true)? Ext.MessageBox.INFO : Ext.MessageBox.ERROR, 
       buttons: Ext.Msg.OK 
      }); 
     } 
    } 
} 

});

Я хотел бы посмотреть специально для двух конфигов: «AUTOSYNC» и «batchActions»

Надеется, что это поможет вам в дальнейшем разобраться с проблемой!

+0

Спасибо за ответ, но я не использую прокси-сервер для обновления/удаления данных. Я вручную использую запрос ajax. Еще раз спасибо – thinkdevcode

+0

Это нормально, хотя я думаю, что вы получите больше пользы, используя прокси-сервер ... но у вас может быть какой-то особый сценарий, где вы хотите иметь полный контроль над каждым шагом, тогда это отлично! Ура! –

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