Ответ 1
Фактически вы можете передать объект params методу load()
newsletters.load({
params: {to: 'test1', from: 'test2'}
})
В настоящее время у меня возникают проблемы с перезагрузкой json-магазина новыми параметрами. Вот мой магазин:
newsletters = new Ext.data.JsonStore({
url: '/newsletters/',
root: 'results',
fields: [
'id',
'body'
'recipients'
],
baseParams: { command: 'json', to: dateTo, from: dateFrom },
autoLoad: true
});
dateTo и dateFrom являются начальными пустыми строками (''), и проверка в firebug/newsletters вызывается с правильными параметрами.
Теперь ни одна из следующих техник не работает:
Изменение значений dateTo и dateFrom, а затем вызов newsletters.reload() по-прежнему вызывает страницу с параметрами и из пустых строк.
Вызов newsletters.reload( { to: 'test1', from: 'test2' } );
все еще видит параметры как пустые строки.
Наконец, как и в руководстве, я попытался:
lastOptions = newsletters.lastOptions;
Ext.apply(lastOptions.params, {
to: 'test1',
from: 'test2'
});
newsletters.reload(lastOptions);
Это снова не запрашивает/бюллетени с обновленными параметрами.
Любые советы оценены!
Фактически вы можете передать объект params методу load()
newsletters.load({
params: {to: 'test1', from: 'test2'}
})
Из документов вы, вероятно, можете сделать:
store.setBaseParam('to', dateTo);
Теперь, если я правильно понял, вы хотите, чтобы ваши baseParams менялись всякий раз, когда меняются даты и даты.
Вы можете попробовать:
var dateTo = '', dateFrom = '';
store.on('beforeload', function(s) {
s.setBaseParam('to', dateTo);
s.setBaseParam('from', dateFrom);
});
// This should work :
dateTo = 1;
dateFrom = 2;
store.load();
Моя проблема: у меня есть магазин, который должен запрашивать данные через прокси-сервер для резервного копирования. Этот запрос должен содержать параметр с именем filter
, который просто поможет серверу решить, какой набор результатов интересует клиент. Этот параметр загружается из Combobox
или какого-либо другого компонента, который пользователь может использовать чтобы указать, какой фильтр использовать.
С моей точки зрения, параметры не должны устанавливаться в хранилище и не использовать параметр загрузки. Я объясню, почему:
load
самостоятельно, помните, что уже есть некоторые компоненты как пейджинг и пользовательские компоненты, которые запускают этот метод.Каким будет правильный путь с моей точки зрения:
Каждый раз, когда срабатывает a 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()
}
});
}
});