ExtJS 4.2: загрузка одного элемента из удаленного хранилища

Скажем, у меня есть магазин, и в моей базе данных 20 миллионов строк. (достаточно, чтобы у меня был размер страницы настройки, чтобы я возвращал только 100 строк на страницу). Так как у меня установлен размер страницы, при исходном вызове я получаю только 100 элементов назад. Таким образом, следующее возвращает ноль:

Ext.getStore('MyLargeStore').getById(200); // returns null

Это имеет смысл для меня, так как технически магазин на стороне JS не имеет этого определенного идентификатора. Но есть ли способ сделать принудительный поиск, если этот идентификатор не существует? Из того, что я могу сказать, я уже сделал все "удаленное" и "автоматическое", что нужно в моем магазине:

Ext.define('MyApp.store.MyLargeStore', {
extend: 'Ext.data.Store',

requires: [
    'MyApp.model.MyLargeModel'
],

constructor: function(cfg) {
    var me = this;
    cfg = cfg || {};
    me.callParent([Ext.apply({
        autoLoad: true,
        autoSync: true,
        model: 'MyApp.model.MyLargeModel',
        remoteFilter: true,
        remoteSort: true,
        storeId: 'MyLargeModel',
        buffered: true,
        pageSize: 100
    }, cfg)]);
}
});

Есть ли способ заставить его извлекать данные с удаленного сервера, когда идентификатор не существует? Кажется, я не могу найти метод в документах (если я не пропускаю его, поскольку их документы иногда немного сложно расшифровать =/)

Кроме того, я предполагаю, что вы всегда можете выполнить загрузку в магазине, но я вполне уверен, что если я загружу только эту 1 строку, то во всех других местах, где используется этот магазин, также будет только эта строка (что я не обязательно хочу) Так что теоретически будет ли создание магазина на лету моим единственным вариантом? Похоже, что должен быть более простой способ, поэтому я решил спросить. Должен быть какой-то лучший способ, чем создать магазин, а затем взять запись из этого нового магазина...

1 ответ

Решение

То, что вы пытаетесь сделать здесь, - это неправильный подход к проблеме. Вы должны вернуться к тому, для чего вам нужна эта строка, и сделать независимый ajax-вызов на ваш сервер с идентификатором строки, которую вы пытаетесь найти. Затем сервер будет искать эту единственную строку в БД и затем возвращать данные, чтобы создать модель для того, для чего вам нужна эта строка. Эта логика должна быть сделана независимо от магазина.

Другие вопросы по тегам