Перезагрузка магазина json с новыми параметрами ExtJs Ext.data.JsonStore - PullRequest
27 голосов
/ 19 июля 2010

У меня сейчас проблема с перезагрузкой магазина 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);

Это опять не запрашивает / рассылки с обновленными параметрами.

Любой совет приветствуется!

Ответы [ 3 ]

29 голосов
/ 26 июля 2010

Вы можете фактически передать объект params методу load ()

newsletters.load({
  params: {to: 'test1', from: 'test2'}
})
5 голосов
/ 19 июля 2010

Из документов вы, вероятно, можете сделать:

store.setBaseParam('to', dateTo);

Теперь, если я правильно понимаю, вы хотите, чтобы ваши baseParams менялись всякий раз, когда меняются dateTo и dateFrom.попробуй:

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();
4 голосов
/ 28 октября 2012

Моя проблема заключалась в том, что у меня есть хранилище, которое запрашивает данные через прокси-сервер на сервер. Этот запрос должен содержать параметр с именем filter, который просто поможет фону решить, какой набор результатов интересует клиент. Этот параметр загружается из Combobox или какого-либо другого компонента, который может использовать пользователь чтобы указать, какой фильтр следует использовать.

С моей точки зрения, параметры не должны быть установлены в Store и не должны использоваться с параметром load. Я объясню почему:

  1. Настройка параметров для хранилища будет означать, что для каждого другого компонента, использующего то же хранилище, будут настроены эти параметры, что означает, что у вас могут возникнуть проблемы с параллелизмом.
  2. А во втором случае неинтересно настраивать его с помощью метода 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()
            }
       });
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...