Показать сообщение отдельно
  #9 (permalink)  
Старый 21.06.2015, 11:07
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Не знаю как забиндить это дело, похоже надо миксин Bindable внедрять.

Пока сделал хаками:

Ext.define("MyApp.override.form.field.ComboBox", {
	override: "Ext.form.field.ComboBox",
	
	config: {
		comboboxParam: "combobox"
	},
	
	initComponent: function() {
		this.callParent();
		this.store.combobox = this;
	},
	
});

Ext.define("MyApp.override.data.Store", {
	override: "Ext.data.Store",
	
	listeners: {
		beforeload: function(store, operation) {
			if ("combobox" in store && store.combobox instanceof Ext.form.field.ComboBox) {
				var params = {};
				params[store.combobox.getComboboxParam()] = store.combobox.getValue();
				operation.setParams(Ext.Object.merge(operation.getParams() || {}, params));
			}
		}
	}
	
});


Проверил, работает. Значение comboboxParam передается на сервер (то есть под этим именем передается значение комбобокса, а сервер уже сам решает что с ним делать). Имя параметра comboboxParam можно менять прямо в комбобоксе (аналогично как меняется к примеру queryParam):

xtype: "combobox",
comboboxParam: "mycombobox"


Но решение мне не нравится. В выпадающем списке, помимо обычной последовательности будет присутствовать эта запись (причем возможно повторно, ибо на какой-то странице оно уже присутствует).

Причем неизвестно как поведет себя комбобокс, если эта запись при листании выпадающего списка пропадет (хотя если comboboxParam будет постоянно передаваться, то не пропадет). А если не пропадет - будет постоянно на глазах у изумленного пользователя (ему же не понятно, почему эта запись присутствует на всех страницах). Эта проблема частично решается, если сервер будет просматривать запрос на наличие параметра query (если он есть, то comboboxParam надо игнорировать). Частично потому, что имя query клиентом может быть изменено. Также myparam можно игнорировать если page>1. (Кстати, если query не пустой, то comboboxParam=query.)

В общем неплохо было бы потом переделать это поведение комбобокса, чтобы он display value брал не из store, а отдельно загружал, используя модель store (при условии, что прокси описан в модели и что value совпадает с id модели... блин, много всяких условий однако...).

Последний раз редактировалось khusamov, 21.06.2015 в 11:57.
Ответить с цитированием