Надеюсь, что это дополнение поможет кому-то избежать затрат времени на отладку ядра библиотеки:
С этим связано обращение к экземпляру Ext.data.Store внутри Controller с использованием метода get контроллера: например, для«DT.store.UsersStore» выше с использованием this.getUsersStoreStore ():
обратите внимание, что если хранилище уже связано в представлении (например, было объявлено как свойство хранилища для Grid.panel «UsersGrid»).Определение виджета .Panel), тогда этот метод getter фактически получит другой экземпляр того же класса Store, а не экземпляр, используемый виджетом! Причина заключается в том, что добавление хранилища в объект конфигурации конструктора выполняется следующим образом:
stores: ['UsersStore']
фактически добавит новый экземпляр хранилища в хеш Ext.data.StoreManager.map, так что - предположим, что «UsersStore» - единственный экземпляр хранилища, созданный на данный момент - ключи карты теперь выглядят так:
0: "ext-empty-store"
1: "UsersStore"
2: "myStore"
Теперь представьте, что вы хотите прочитать некоторые новые данные, используя прокси вашего магазина и дидобавьте эти новые данные в «UsersGrid», и вы захотите сделать все это, когда пользователь нажимает на что-то, поэтому внутри контроллера у вас будет метод обработчика для пользовательского события с кодом:
'user-selector' : {
click: function(){
var oStoreReference = this.getUsersStoreStore();
oStoreReference.load( {params:{} });
}
}
Этот вызовчтобы получить ссылку, она будет внутренне переведена в this.getStore («UsersStore») и вернет ссылку на сгенерированный контроллер - 1: «UsersStore», а не - 2: «myStore» - как и следовало ожидать.Кроме того, вызов load () загрузит экземпляр UsersStore с новыми моделями, и это не будет отражено в вашем представлении сетки (поскольку сетка привязана и прослушивает события, сгенерированные экземпляром хранилища "myStore").
Так что лучше получите доступ к хранилищу по его itemId, используя общий метод getStore: this.getStore ('storeItemId')