EXTJS4: Подход для нескольких сеток, показывающих данные из одного хранилища, но каждая сетка имеет разные записи - PullRequest
2 голосов
/ 28 февраля 2012

Предположим, что на одной странице есть две сетки, которые имеют одинаковый столбец, но разные записи для отображения.

Возможны два варианта решения:

  1. Используйте ту же модель и магазин и отфильтруйте в магазине перед рендерингом сетки. Потенциальная проблема в этом решении: поскольку базовое хранилище одинаково, когда вторая сетка будет Визуализированный фильтр на первой сетке будет уничтожен.

  2. Используйте другое определение магазина и определение модели (оставьте прокси и поля такими же, как в другом определении магазина / модели, но просто измените имя): Проблемы: я попробовал это на приложении Pandora, и оно начало вызывать странную проблему, так что вторая сетка не отображала никаких записей.

Какой подход лучше и как решить соответствующие проблемы.

-Спасибо

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Мы столкнулись с точно такой же проблемой в нашем проекте. В итоге я использовал следующий подход:

  • вы определяете одну модель и один класс магазина
  • загрузка хранилища с сервера для первой сетки
  • клонировать объект хранилища со всеми записями (возможно, вы захотите в Google узнать, как именно это сделать)
  • на данный момент вам нужно решить, нужна ли вам только локальная копия или копия, привязанная к одному и тому же источнику данных на сервере - оба могут быть реализованы в зависимости от того, что вам нужно

Я могу опубликовать пример кода для клонирования, если вам это нужно.

ОБНОВЛЕНИЕ

Вот пример кода для клонирования объекта хранилища:

cloneStore: function(store, storeClass) {
    var new_st = Ext.create(storeClass),
        recs = [],
        filter;

    store.each(function(r) {
        recs.push(r.copy)}
    );
    new_st.add(recs);

    return new_st;
},
0 голосов
/ 28 февраля 2012

Подход, который я выбрал и рекомендую, - не ссылаться на один и тот же экземпляр магазина, а создать новый экземпляр вашего магазина для каждой сетки:

store: Ext.create ('MyStore', {...});

...