Приложение Ext Js раздувается магазинами

Мое приложение (Ext JS 4.2.1) содержит много панелей сетки, а также столько же магазинов. При определении магазина я использую storeId для сопоставления сетки и хранилища. Многие из этих магазинов практически идентичны. Образец магазина выглядит так

Ext.define('MyApp.store.UsersStore', {
     model: 'MyApp.model.User',
     storeId: 'UsersStore',
     proxy: {
         type: 'rest',
         url: 'somePrefix/users',
         reader: { 
             type: 'json', 
             totalProperty: 'total', 
             root: 'users'            
         } 
     }
});

Другой магазин «AvailableUsersStore» выглядит очень похоже, он просто использует другой URL-адрес, «somePrefix/users/?Available» и другой storeId, «AvailableUsersStore». Поэтому в моем приложении есть много довольно избыточных строк кода, распределенных по многим файлам хранилища. Любая идея, как я могу очистить это?


person Christoph    schedule 17.06.2013    source источник


Ответы (1)


Создайте базовый класс для вашего магазина:

Ext.define('MyApp.store.UsersStore', {
     extend: 'Ext.data.Store',
     model: 'MyApp.model.User',
     proxy: {
         type: 'rest',
         url: 'somePrefix2/users1',
         reader: { 
             type: 'json', 
             totalProperty: 'total', 
             root: 'users'            
         } 
     }
});

А затем расширьте свой базовый класс:

Ext.define('MyApp.store.AvailableUsersStore', {
     extend: 'MyApp.store.UsersStore',
     storeId: 'userStore1',
     proxy: {
         url: 'somePrefix2/users2',
     }
});

Ext.define('MyApp.store.RemovedUsersStore', {
     extend: 'MyApp.store.UsersStore',
     storeId: 'userStore2',
     proxy: {
         url: 'somePrefix2/users3',
     }
});

Посмотрите здесь для расширения класса. А также взгляните на Deft.js для гибкой архитектуры в extjs.

person Davor Zubak    schedule 17.06.2013
comment
Я никогда не использую явный Ext.create в своих магазинах, я просто определяю их, и я думаю, что StoreManager выполнит Ext.create при первом доступе. - person Christoph; 17.06.2013
comment
Я предлагаю Deft.js для чистой и поддерживаемой архитектуры с использованием extjs. - person Davor Zubak; 17.06.2013
comment
Вау, я никогда не знал об этом раньше. Спасибо, это очень поможет! - person Christoph; 17.06.2013