2013-12-05 2 views
2

Как вы реализуете Store для одноэлементного?Singletons Ext JS (4.2.1) и магазины

В Architect мой магазин имеет свойство флажок, который добавляет свойство

singleton: true, 

Если добавить, что затем перезагрузить приложение он не загружается (я могу дать более подробную информацию, если требуется об ошибке)

Uncaught TypeError: object is not a function VM5238:3 
(anonymous function) VM5238:3 
Ext.ClassManager.instantiate ext-all-debug.js:5485 
(anonymous function) ext-all-debug.js:2109 
Ext.define.getStore 

Если я удалю это свойство, оно загрузится нормально, но где я использую Ext.getStore («MyStore»), то возвращаемые магазины содержат разные данные в зависимости от того, где я использую хранилище. У меня есть один контроллер, где я использую имя класса внутри метода getStore, и это используется в нескольких функциях внутри одного контроллера.

Также не существует документации о свойстве singleton в документах. Если я посмотрю на Ext.data.Store, то нет синглтона.

ответ

3

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

Используйте storeId вместе с Ext.StoreManager. Обратите внимание, что каждый storeId должен быть уникальным, и как только вы создадите экземпляр магазина, он зарегистрируется в Ext.StoreManager с его storeId. Вы можете получить магазин, позвонив по телефону lookup('storeId') по телефону Ext.StoreManager. И да, вы можете сделать это из любого места в своем коде.

Например все Ext.Components что подмешать Ext.util.Binable (которые большинство (все) нативные компоненты, которые связывают магазин) будет хорошо с storeId строки, присвоенного свойству store CFG. Binable mixin будет внутренне искать его из StoreManager. Если вам нужно сделать это самостоятельно

//... 
store: Ext.StoreMgr.lookup('storeId') || Ext.create('YourStoreClassname') 
//... 
+0

Звучит неплохо. каков наилучший способ создания магазина в первом случае. Я читал (на сайте sencha), что лучше оставить id для создания и вместо этого использовать itemId. Когда я использовал Ext.getStore, он создавал для меня магазин. – delp

+0

@delp Если вы используете ExtJS MVC, вам ничего не нужно делать. Болезнь будет загружена и создана контроллером, а storeId будет идентифицирующим именем класса магазина. AFAIK 'App.store.StoreName' должно быть «StoreName», а «App.store.soreStameName» должно быть «sub.StoreName». Если вы не используете MVC, сделайте это как в моем примере – sra

+0

Да, вы правы. Он (при использовании контроллера) автоматически создает хранилище, а когда он игнорирует значение storeId, которое вы устанавливаете для него, и делает storeId таким же, как имя класса. спасибо. – delp

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