#extjs #proxy #extjs4
#extjs #прокси #extjs4
Вопрос:
Я хочу изменить прокси-сервер магазина до (!) его загрузки. Конкретная проблема в этом случае заключается в том, что я не нахожу подходящий момент для загрузки.
Подробно:
Я создал MVC-модель, создав представление, контроллер, модель и хранилище, как определено архитектурой EXTJS4. Представление представляет собой сеточную панель. Он определяет хранилище в своем собственном операторе define:
Ext.define('P.view.MyView' ,{
extend: 'Ext.grid.Panel',
alias : 'widget.MyView',
...
store: 'MyStore',
...
}
Когда я загружаю хранилище с помощью «автозагрузка: истина», все работает нормально, но, конечно, прокси-сервер становится статичным, как определено в коде. Когда я не использую «автозагрузку» и пытаюсь установить «extraParams» и загрузить хранилище в «initComponent» моего представления, например:
initComponent: function() {
...
this.store.load();
....
Я получаю сообщение об ошибке: у объекта «MyStore» нет метода «load».
Как мне это сделать?
Комментарии:
1. вы уверены, что это не синтаксическая ошибка… this.store.load();
2. Да, это было. Исправлено.
Ответ №1:
Я бы добавил, что другим распространенным способом загрузки данных в последний момент является прослушивание afterrender в самой сетке следующим образом:
listeners: {
afterrender: function(grid) {
grid.store.getProxy().url = 'request/my.json'; //modify your URL
grid.store.load();
}
}
Как вы можете видеть, вы также можете влиять на настройки своего хранилища и прокси. Это помогает повторно использовать хранилища для похожих сеток.
Ответ №2:
При вызове this.store.load()
в initComponent хранилище еще не инициализировано. Свойство this.store
является строкой в момент вызова. Вы должны вызвать загрузку после того, как был вызван родительский элемент вашего виджета initComponent
(где происходит инициализация хранилища).:
initComponent: function() {
...
this.callParent(arguments);
this.store.load();
....
Комментарии:
1. Дополнительный вопрос: где и как я должен влиять на «дополнительные параметры». Я не могу сделать это в самом представлении (т. Е. перед сохранением. загрузить), потому что только компонент, реализующий представление (и его хранилище), знает подробности.
2. @heinob, это зависит от обстоятельств. При каких условиях дополнительные параметры должны быть изменены?
3. У меня есть панель вкладок. Панель сетки (MyView) добавлена в качестве новой вкладки. Содержимое сетки (хранилище, загруженное через прокси) зависит от обстоятельств вне представления, но известно функцией, которая добавляет вкладку / представление.
4. @heinob, я думаю, что лучшим местом была бы функция, которая добавляет вкладку / просмотр. Если эта функция находится в контроллере, вы можете получить доступ к своему хранилищу с помощью средства получения хранилища контроллера. F.i. если ваше хранилище называется «MyStore», вы можете получить к нему доступ через
this.getMyStoreStore()
.