Я экспериментирую с ошибкой в ExtJS 4 Combobox AJAX Store.
У меня есть сетка со статьями, каждая статья имеет поставщика и категория , каждый поставщик предлагает товары, принадлежащие к определенной категории .Для того, чтобы отфильтровать сетку, я поставил 2 комбинации (Select Lists).Один для поставщика и один для категории .Эти комбинации получают свои значения с помощью AJAX из сценария php.
Все прошло хорошо, пока я не попытался связать комбинации следующим образом:
Когда пользователь выбирает категорию изполе со списком, поставщик Магазин обновляется с поставщиками, которые предлагают эту категорию (работает отлично!).
Пользователь выбирает поставщика из списка, и Категория Обновления магазина (обновление хорошо, как видно с Firebug).
Теперь моя проблема: если пользователь снова выберет комбинированный список категории , маска загрузки не исчезнет, поэтому она не сможет изменить значение комбинированного списка.
Я тестировал, AJAX работает нормально, это просто проблема EXTJS 4 с маской загрузки.
Эта проблема возникает в обоих направлениях:
A)
1. Пользователь выбирает категорию
2. Пользователь выбирает поставщика
3. Пользователь НЕ МОЖЕТ выбрать категорию (маска загрузки не исчезнет)
И
B)
1. Пользователь выбирает поставщика
2. Пользователь выбирает категорию
3. Пользователь CANНе выбирайте поставщика (маска загрузки не исчезает)
РЕДАКТИРОВАТЬ:
Проблема, похоже, также возникает в этой ситуации (и наоборот: поставщик-> категория)
1. Пользователь выбирает категорию
2. Пользователь меняет категорию
3. Пользователь НЕ МОЖЕТ выбрать поставщика (маска загрузки не исчезнет)
Вот мои модели:
Ext.define('Category', {
extend: 'Ext.data.Model',
fields: [
{ name: 'name'},
{ name: 'id'}
]
});
Ext.define('Supplier', {
extend: 'Ext.data.Model',
fields: [
{ name: 'name'},
{ name: 'id'}
]
});
Вот мои магазины:
var categoryStore = Ext.create('Ext.data.Store', {
model: 'Category',
autoLoad: true,
remoteSort: true,
proxy: {
type: 'ajax',
url: 'GetCategorysForSupplier',
reader: {
type: 'json',
root: 'items'
},
extraParams: {
supplier: 0
}
}
});
var supplierStore = Ext.create('Ext.data.Store', {
model: 'Supplier',
autoLoad: true,
remoteSort: true,
proxy: {
type: 'ajax',
url: 'getSuppliersForCategory.php',
reader: {
type: 'json',
root: 'items'
},
extraParams: {
category: 0
}
}
});
А вот мои комбо:
var categoryFilterCombo = Ext.create('Ext.form.field.ComboBox', {
xtype: 'combo',
store: categoryStore,
displayField: 'name',
valueField: 'id',
fieldLabel: 'Category Filter',
listeners: {
change: function(field,newVal) {
if (Ext.isNumeric(newVal)) {
supplierStore.proxy.extraParams.category = newVal;
articleStore.proxy.extraParams.category = newVal;
supplierStore.load();
articleStore.load();
}
}
}
});
var supplierFilterCombo = Ext.create('Ext.form.field.ComboBox', {
store: supplierStore,
displayField: 'name',
queryMode: 'local',
valueField: 'id',
fieldLabel: 'Supplier Filter',
listeners: {
change: function(field,newVal) {
if (Ext.isNumeric(newVal)) {
categoryStore.proxy.extraParams.supplier = newVal;
articleStore.proxy.extraParams.supplier = newVal;
categoryStore.load();
articleStore.load();
}
}
}
});
С уважением,
Дэн Кернау