2014-12-06 3 views
5

Я хотел бы иметь разные экземпляры одного и того же представления в разных магазинах одновременно в приложении ExtJS. В настоящий момент я вижу несколько экземпляров одного вида (Ext.view.View) в окне просмотра.Лучшая практика иметь один и тот же вид и хранить несколько раз в ExtJS 4

Но какова наилучшая практика для разных магазинов во всех представлениях? Каждый пример, который я нашел, использует Store-ID в представлении, которое было создано с помощью store-Config контроллера. Но для каждого представления он будет использовать один и тот же магазин.

На данный момент я понял следующие возможные решения:

  1. Создать собственный класс магазина для каждого экземпляра вида. Добавьте все магазины в контроллер и используйте другой Store-ID для каждого экземпляра представления.
  2. Не используйте магазины контроллера вообще и создайте новое хранилище в initComponent представления, вручную передавая разные параметры каждому экземпляру магазина.
  3. Не используйте магазины контроллера вообще и создайте новое хранилище в компоненте initComponent вручную. Затем используйте загрузку, чтобы загрузить хранилище вручную, используя разные параметры для каждого экземпляра магазина.

Является ли какое-либо из этих решений лучшей практикой или должно быть сделано по-другому?

+2

Downvote без комментариев настолько бесполезен ... – Werzi2001

+0

Это справедливый вопрос, я не понимаю, почему это было приостановлено. –

+0

Спасибо.Btw я решил для решения 3 на время, пока не будет опубликовано лучшее решение. – Werzi2001

ответ

3

Дело с хранит массив контроллера в том, что она будет перекрывать любую storeId определенную. После загрузки класса хранилища контроллер устанавливает storeId соглашением по пространству имен, создает хранилище и создает метод метода геттера, используя значение как soreId.

Позвольте мне представить вариант 4

  • Определите один магазин для зрения и требуют его в представлении (вы также можете потребовать его в контроллере, просто используйте requires массив).
  • Выберите действительный itemId для просмотра и действительный storeId для вашего магазина, который должен зависеть от itemId вида (установите его при создании представления!).
  • Внутри initComponent создайте storeId и найдите магазин в StoreManager. Если он не существует, создайте его и поставьте конфигурацию клиента и storeId.

Если вам нужно уничтожить вид и магазин каждый раз смотреть на this post

Демо InitComponent

initComponent: function() { 
    var me = this, 
     storeId = me.storeId + me.itemId; 
    me.store = Ext.StoreManager.lookup(storeId); 
    if(me.store === null) 
     me.store = Ext.create('App.data.CustomViewStore',Ext.apply({storeId: storeId},me.storeCfg || {})); 
    me.callParent(arguments); 
} 

Примечание: Если вы загрузите вид с views массива вы закончится тем, что геттер не может дать вам представление, которое вы ожидали. Здесь вы также можете использовать требуемый массив контроллера. Если вы хотите использовать getter, просто создайте свой собственный, используя конфигурацию refs.

+0

Спасибо за ваш ответ, но я не вижу «большой» разницы с моим вариантом 2. Это только о storeId и Ext.StoreManager, или я что-то пропустил? – Werzi2001

+0

@ Werzi2001 Нет, это не большая разница. Но это разница, которая имеет смысл! Дело в том, что вы все равно можете определить свой магазин на своем собственном и не загрязнять ваш метод «initComponent'». – sra

Смежные вопросы