Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.03.2012, 00:44
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

Dynamic loading of ComboBox
Я новичёк в ExtJS, использую 4-ю версию. Есть comboBox:
{
	name: 'myName',
	xtype: 'combobox',
	hiddenName:'popType',
	
	store: new Ext.data.Store({

		proxy: new Ext.data.HttpProxy({url: 'php/test.php',method:'GET'}),
		
		reader: new Ext.data.JsonReader({
			root: 'topics',
			totalProperty: 'count',
			fields: [{name: 'abbr'},{name: 'name'}]
		})
	}),
	
	valueField:'abbr',
	displayField:'name',
	triggerAction: 'all',
	emptyText:'Select',
	selectOnFocus:true,
	editable: false            	
}

Сервак возвращает ответ вида (проверено в Furebug, ответ действительно приходит):
Код:
{count:"26",topics:[{"abbr":"1","name":"option1"},
{"abbr":"2","name":"option2"}, ...

Врезультате бесконечная загрузка


__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
Ответить с цитированием
  #2 (permalink)  
Старый 08.03.2012, 11:06
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

Tim,
попробуйте у reader'a указать
type : 'json',
successProperty: 'success'

а в ответе еще возвращать "success": true
Ответить с цитированием
  #3 (permalink)  
Старый 08.03.2012, 14:31
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

сделал, всё равно тоже самое
__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
Ответить с цитированием
  #4 (permalink)  
Старый 08.03.2012, 18:42
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

Извиняюсь что невнимательно посмотрел ваш код.
Проверил, так работает:
{
	hiddenName: 'popType',
	xtype: 'combo',
	store: Ext.create('Ext.data.Store', {
		autoLoad: true,
		proxy: {
			url: 'php/test.php',
			type: 'ajax',
			reader: {
				root: 'topics',
				type: 'json',
				totalProperty: 'count',
				successProperty: 'success'
			}
		},
		fields: [ 'abbr', 'name'],
	}),
	valueField: 'abbr',
	displayField: 'name',
	emptyText: 'Select',
	selectOnFocus: true,
	editable: false,
	queryMode: 'local'
}


autoLoad: true лучше использовать когда у вас либо приложение небольшое, либо данных немного будет в хранилище. Если же например вы хотите загружать store при нажатии триггера, можно переопределить onTriggerClick у комбобокса, например:
onTriggerClick: function() {
	if( this.getStore().getCount() == 0 ) {
		this.getStore().load({
			callback: function() {
				this.expand();
			}.bind(this)
		});
	} else {
		( this.isExpanded ) ? this.collapse() : this.expand();
	}
}
Ответить с цитированием
  #5 (permalink)  
Старый 08.03.2012, 20:54
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

nekto_O,
Спасибо, заработало наконец то. Я нашёл ещё один, более кривой, точнее совсем кривой способ: загружать массив ajax'ом и создавать combo в функции обратного вызова.

Есть ещё одна проблема.

Можно это как то исправить?
__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
Ответить с цитированием
  #6 (permalink)  
Старый 08.03.2012, 21:36
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

Tim,
Можно конечно. У вас вероятно с сервера приходит отформатированный текст? Самое простое решение: в ответе не нужно html отправлять, вместо этого у комбобокса настроить в listConfig шаблон вывода записей, например:
listConfig: {
	itemTpl: '{name} - <font color="#777777">[{abbr}]</font>'
}
Ответить с цитированием
  #7 (permalink)  
Старый 08.03.2012, 23:28
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

спс
__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ComboBox на Panel-e. rom30 ExtJS 1 13.12.2011 19:53
Как узнать какое поле выбрано в combobox? viperrr ExtJS 6 15.11.2011 15:08
Использование combobox поля в grid dionic ExtJS 0 26.05.2011 14:12
combobox начальная установка Jevgeny ExtJS 4 16.10.2010 21:47
Grid + ComboBox kostiaGt ExtJS 3 05.11.2009 17:15