Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Правильная отрисовка combo в grid (https://javascript.ru/forum/extjs/27858-pravilnaya-otrisovka-combo-v-grid.html)

Eugent 27.04.2012 11:47

Правильная отрисовка combo в grid
 
Привет всем! Возможно мой вопрос покажется банальным но все же...

Есть редактируемая таблица, одно из полей которой должно быть списком выбора (combo). Нужно чтобы при отображении таблицы выводился не идентификатор отдела, а его название.

Пример - http://extdev.eugent.org/testero/. Пункт 'Editable Grid'.

Привожу описание столбца. Часть кода примера:
{
	text	: 'Department', 
	xtype	: 'numbercolumn',
	editor	: {
		xtype: 'combo',
		store: Ext.create('Ext.data.Store', {
			autoLoad: false,
			idProperty: 'id',
			
			fields: [
				{name: 'id',	type: 'int'},
				{name: 'name',	type: 'string'}
			],
			
			proxy: {
				type: 'ajax',
				url: '/testero/data/getdata.php',
				method: 'GET',
				extraParams: {
					type: 'departments'
				},
				reader: {
					root: 'data',
					type: 'json'
				}
			}
		}),
		typeAhead		: true,
		triggerAction	: 'all',
		lazyRender		: false,
		queryMode		: 'remote',
		displayField	: 'name',
		valueField		: 'id',
		editable		: false
	},
	flex	: 1,
	format	: '0',			
	hidden	: false
}

DjDiablo 27.04.2012 13:12

Помоему с editor как раз всё нормально
как вариант измени прорисовку самой таблицы.

{
    text    : 'Department',
    xtype   : 'numbercolumn',

    renderer: function(value){
         switch (value) {
                   case 1: return 'Управление';
                   case 2: return 'Бухгалтерия';

                   default: return 'Да хрен его знает что это такое )))';
         };    
         //Ещё прикольное гденибудь хранить store с отделами, и здесь из него извлекать имя по id (переданному в value).
   }
   editor :{
    //бла бла бла
   }
}

Eugent 27.04.2012 13:15

Хранилище приходит с сервера
 
Цитата:

Сообщение от DjDiablo (Сообщение 171552)
Помоему с editor как раз всё нормально
измени прорисовку самой таблицы.

renderer: function(value){
        if (value === 1) return 'Управление';
        if (value === 2) return 'бухгалтерия';    
   }

Это если список жесткий и небольшой, в системе, в которой это используется списки больше и строятся они динамически.

Хранилище combo подгружается с сервера.

Eugent 27.04.2012 13:20

Мне по идее желательно предварительно загрузить как-то хранилище комбо и потом изменить рендер, но комбо же используют не одно хранилище. Или как-то их нацелить на одно хранилище - что-то запутался я во всем этом...

DjDiablo 27.04.2012 13:38

renderer только свой столбец рендерить будет.
В твоём примере комбо использует только одно хранилище.
Просто обьяви это хранилище гденибудь на стороне чтобы одним экземпляром полтзовались как renderer так и combo.

Меня сейчас занимает мысль, о том какой выигрыш можно было бы получить, используя ассоциации.

Eugent 27.04.2012 17:06

До ассоциаций у меня руки не доходят разобраться

nekto_O 27.04.2012 18:27

Ну если у Вас хранилище содержит большой объем данных, да к тому же пополняемый, то конечно лучше использовать ассоциации. Если данных немного и они статические, можно их в локальном хранилище разместить, или же в коде (если очень мало).
Цитата:

Сообщение от Eugent
До ассоциаций у меня руки не доходят разобраться

Если вы знаете теорию реляционных баз данных, то смысл использования ассоциаций понять не составит труда :)

Eugent 28.04.2012 13:22

А есть у кого-нибудь такой пример с ассоциациями? глянуть для примера


Часовой пояс GMT +3, время: 18:35.