URL-адрес динамического прокси для store.load () в архитектуре MVC с Ext JS - PullRequest
3 голосов
/ 06 ноября 2011

Я хочу сменить прокси магазина до (!) Его загрузки. Конкретная проблема в этом случае заключается в том, что я не могу найти подходящий момент для загрузки.

Подробно:

Я создал MVC-модель, создав представление, контроллер, модель и хранилище в соответствии с архитектурой EXTJS4. Представление представляет собой сеточную панель. Он определяет хранилище в своем собственном операторе define:

Ext.define('P.view.MyView' ,{
    extend: 'Ext.grid.Panel',
    alias : 'widget.MyView',
    ...
    store: 'MyStore',
    ...
}

Когда я загружаю хранилище с «autoload: true», все работает нормально, но, конечно, прокси-сервер тогда статичен, как определено в коде. Когда я не использую «автозагрузку» и пытаюсь установить «extraParams» и загрузить хранилище в «initComponent» моего представления, например:

initComponent: function() {
    ...
    this.store.load();    
    ....

Я получаю сообщение об ошибке: у объекта "MyStore" нет метода load.

Как мне это сделать?

Ответы [ 2 ]

4 голосов
/ 07 ноября 2011

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

       listeners: {
             afterrender: function(grid) {
                grid.store.getProxy().url = 'request/my.json'; //modify your URL
                grid.store.load();    
             }
        }

Как видите, вы также можете влиять на настройки вашего магазина и прокси. Это поможет с повторным использованием магазинов для аналогичных сеток.

3 голосов
/ 06 ноября 2011

При вызове this.store.load() в initComponent хранилище еще не инициализировано.Свойство this.store является строкой в ​​момент вызова.Вы должны вызвать загрузку после того, как родительский элемент вашего виджета initComponent (где происходит инициализация магазина) был вызван:

initComponent: function() {
    ...
    this.callParent(arguments);
    this.store.load();    
    ....
...