проблемы с combo в grid
Не могу добится чтобы комбо который находится в гриде
выводилось название, а значение было кодом. при выборе значения в комбо в таблице отображается код тут стор куда из json загружается данные Ext.define('ccmbUser2', { extend: 'Ext.data.Model', fields: ['id', 'name'] }); var store_cust_cmb = Ext.create('Ext.data.Store', { model: 'ccmbUser2', proxy: { type: 'ajax', url : 'custall.php', actionMethods: { read: 'POST' }, autoLoad: true } }); тут описание колонок в таблице const col_grid_vagon = [ { text : 'Контрагент', dataIndex: 'customer', flex:1, editor: new Ext.form.ComboBox({ //renderTo: 'ex1', id: 'combocust', //fieldLabel: 'Контрагент', store: store_cust_cmb, displayField: 'name', // это текстовое значение <option>…</option> valueField: 'id', // а это значение поля <option value=»…»> }) }, ... как сделать чтобы для колонки таблицы была подмена? 2) и вторая проблема если я в эту таблицу загружаю сохраненные данные с сервера как в поле с combo загрузить и код и значение или это нужно два поля использовать сейчас у меня загружается только name загружается данные в стор store_vagon = new Ext.data.Store ({ pageSize: 10, model: 'vModel', proxy: { type: 'ajax', url: '/vagontable.php?id=' + gridid, actionMethods: { read: 'GET' }, reader: { type: 'json', root: 'data', totalProperty: 'totalCount' } }, autoLoad: true, remoteSort: true }); а как сделать чтобы два значения в таблице сохранялось я не понимаю? |
что я делаю не так?
на doc.sencha.com написано что при комбо в гриде делать так Ext.util.Format.comboRenderer = function(combo){ return function(value){ var record = combo.findRecord(combo.valueField, value); return record ? record.get(combo.displayField) : combo.valueNotFoundText; } } var combo = new Ext.form.ComboBox({ typeAhead: true, triggerAction: 'all', lazyRender:true, mode: 'local', store: new Ext.data.ArrayStore({ id: 0, fields: [ 'id', 'customer' ], data: [[1, 'item1'], [2, 'item2']] }), valueField: 'id', displayField: 'customer' }); var col_grid_vagon = ([ { text : 'Контрагент', dataIndex: 'customer', flex:1, editor: combo, renderer: Ext.util.Format.comboRenderer(combo) }, .... отображается после выбора значения путое поле почему в comboRenderer record возвращает false? что я делаю не так? |
Попробуйте определить в хранилище таблицы два поля id и name. Поле id не показывайте в представлении. Слушайте событие select компонента combobox. В обработчик поступает запись (record) хранилища комбобокса. Перенесите из неё id в выбранную пользователем запись таблицы. Запись найдёте через grid.getSelectionModel().getLastSelected().
|
Цитата:
|
Как установить значение полю с id?
listeners: { select: { fn: function( combo, records, eOpts ){ alert ( records[0].data.id ); } } } при выборе селект, мне показывает какой id выбран, в комбо как мне надо остается name теперь мне нужно в соседнем поле grid |
Насколько мне известно, в данном случае стандартное решение не работает:
combo.up('grid').getSelectionModel().getLastSelected().set('id', records[0].get('id')); Присвойте гриду id или itemId. Должно сработать так: Ext.getCmp('my_grid_id').getSelectionModel().getLastSelected().set('id', records[0].get('id')); либо так: Ext.ComponentQuery.query('[itemId="my_grid_itemId"]')[0].getSelectionModel().getLastSelected().set('id', records[0].get('id')); |
Цитата:
|
Часовой пояс GMT +3, время: 18:49. |