Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.07.2013, 08:55
Аватар для demi
Кандидат Javascript-наук
Отправить личное сообщение для demi Посмотреть профиль Найти все сообщения от demi
 
Регистрация: 30.11.2008
Сообщений: 122

проблемы с 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
					});

а как сделать чтобы два значения в таблице сохранялось я не понимаю?
Ответить с цитированием
  #2 (permalink)  
Старый 23.07.2013, 19:11
Аватар для demi
Кандидат Javascript-наук
Отправить личное сообщение для demi Посмотреть профиль Найти все сообщения от demi
 
Регистрация: 30.11.2008
Сообщений: 122

что я делаю не так?
на 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?
что я делаю не так?
Ответить с цитированием
  #3 (permalink)  
Старый 24.07.2013, 16:56
Профессор
Отправить личное сообщение для novikov Посмотреть профиль Найти все сообщения от novikov
 
Регистрация: 19.11.2012
Сообщений: 178

Попробуйте определить в хранилище таблицы два поля id и name. Поле id не показывайте в представлении. Слушайте событие select компонента combobox. В обработчик поступает запись (record) хранилища комбобокса. Перенесите из неё id в выбранную пользователем запись таблицы. Запись найдёте через grid.getSelectionModel().getLastSelected().
Ответить с цитированием
  #4 (permalink)  
Старый 24.07.2013, 17:06
Аватар для demi
Кандидат Javascript-наук
Отправить личное сообщение для demi Посмотреть профиль Найти все сообщения от demi
 
Регистрация: 30.11.2008
Сообщений: 122

Сообщение от novikov Посмотреть сообщение
Попробуйте определить в хранилище таблицы два поля id и name. Поле id не показывайте в представлении. Слушайте событие select компонента combobox. В обработчик поступает запись (record) хранилища комбобокса. Перенесите из неё id в выбранную пользователем запись таблицы. Запись найдёте через grid.getSelectionModel().getLastSelected().
Да попробую так сделать, спасибо.
Ответить с цитированием
  #5 (permalink)  
Старый 24.07.2013, 20:33
Аватар для demi
Кандидат Javascript-наук
Отправить личное сообщение для demi Посмотреть профиль Найти все сообщения от demi
 
Регистрация: 30.11.2008
Сообщений: 122

Как установить значение полю с id?
listeners: {
						select: {
							fn: function( combo, records, eOpts ){ alert ( records[0].data.id );
								
							}
						}
					}

при выборе селект, мне показывает какой id выбран, в комбо как мне надо остается name
теперь мне нужно в соседнем поле grid
Ответить с цитированием
  #6 (permalink)  
Старый 25.07.2013, 11:37
Профессор
Отправить личное сообщение для novikov Посмотреть профиль Найти все сообщения от novikov
 
Регистрация: 19.11.2012
Сообщений: 178

Насколько мне известно, в данном случае стандартное решение не работает:

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'));
Ответить с цитированием
  #7 (permalink)  
Старый 27.07.2013, 10:20
Аватар для demi
Кандидат Javascript-наук
Отправить личное сообщение для demi Посмотреть профиль Найти все сообщения от demi
 
Регистрация: 30.11.2008
Сообщений: 122

Сообщение от novikov Посмотреть сообщение
Насколько мне известно, в данном случае стандартное решение не работает:

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'));
Дат как работает спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ext grid combobox json evgen.matyaschuk ExtJS 1 18.06.2012 18:43
Правильная отрисовка combo в grid Eugent ExtJS 7 28.04.2012 13:22
Использование combobox поля в grid dionic ExtJS 0 26.05.2011 14:12
Выделит row в grid mycoding ExtJS 1 29.07.2010 15:28
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37