Моя проблема заключалась в том, что у меня есть хранилище, которое запрашивает данные через прокси-сервер на сервер. Этот запрос должен содержать параметр с именем filter
, который просто поможет фону решить, какой набор результатов интересует клиент. Этот параметр загружается из Combobox
или какого-либо другого компонента, который может использовать пользователь чтобы указать, какой фильтр следует использовать.
С моей точки зрения, параметры не должны быть установлены в Store и не должны использоваться с параметром load. Я объясню почему:
- Настройка параметров для хранилища будет означать, что для каждого другого компонента, использующего то же хранилище, будут настроены эти параметры, что означает, что у вас могут возникнуть проблемы с параллелизмом.
- А во втором случае неинтересно настраивать его с помощью метода load, потому что вы не хотите каждый раз явно использовать метод
load
самим собой, помните, что уже есть некоторые компоненты такие как подкачка и пользовательские компоненты, которые запускают этот метод.
Что было бы правильным с моей точки зрения:
Каждый раз, когда срабатывает load
, мы просто прикрепляем дополнительный параметр ненавязчивым способом. Это означает, что триггеру не потребуется вносить какие-либо изменения (помните, что триггером может быть любой компонент, который выполняет store.load()
), и хранилище не должно знать об этом новом параметре.
Здесь вы можете ясно видеть, что это должна быть операция, выполняемая перед запросом данных в прокси, и в моем случае я реализовал это в качестве прослушивателя для события beforeload
. Когда выполняется beforeload
, я просто объединяю новые параметры с рабочим параметром слушателя, который согласно документации равен: beforeload( store, operation, eOpts )
. Окончательная реализация выглядит примерно так:
store.on({
beforeload: function (store, operation, opts) {
Ext.apply(operation, {
params: {
filterName: Ext.getCmp('filterCombo').getValue()
}
});
}
});