Перезагрузка данных из хранилища в ExtJS 4

У меня есть магазин:

var store = new Ext.data.store({
                autoLoad: true,
                autoSync: true,
                model: 'myModel',
                proxy: {
                    type: 'rest',
                    url: '/url/to/my/json/encoded/results',
                    reader: {
                        type: 'json',
                        root: 'results'
                    },
                    writer: {
                        type:'json'
                    }
                }
            });

Это хранилище для некоторой сетки, в которой я отображаю эти результаты. Моя сетка настроена следующим образом:

var myGrid = new Ext.grid.Panel({
                id:'myGridID',
                layout:'anchor',
                border:false,
                title:'My Grid',
                width:412,
                store:store,
                heigth:300,
                frame:false,
                .... etc

В какой-то момент я добавляю запись в свою базу данных, которая отлично работает (если я перезагружаю страницу, я вижу новую добавленную запись в моей сетке). Что я хочу сделать, так это перезагрузить сетку, поэтому, когда я сохраняю эту запись в своей базе данных, хранилище и сетка обновляются и отображают только что добавленную запись без повторной перезагрузки всей страницы.

Я старался:

Ext.getCmp('myGridID').getStore().reload();

а также...

Ext.getCmp('myGridID').getStore().load();

а также...

Ext.getCmp('myGridID').getView().refresh();

и я также попытался установить хранилище как Ext.data.JsonStore, но он ничего не делает.

Но ничего не работает, я безуспешно искал это по всему интернету.

Любая помощь приветствуется.


person martskins    schedule 19.01.2012    source источник
comment
Что происходит, когда вы пытаетесь запустить только: myGrid.getStore().load();   -  person Chewpers    schedule 20.01.2012
comment
Ext.getCmp('myGridID').getStore().load(); должно работать   -  person Molecular Man    schedule 20.01.2012
comment
Может быть, он перезагружает магазин, но мне все равно приходится перезагружать веб-страницу, чтобы увидеть новую запись в сетке.   -  person martskins    schedule 20.01.2012
comment
Ext.getCmp('myGridID').getView().refresh() должно работать.   -  person Thevs    schedule 20.01.2012
comment
Может быть, он перезагружает магазин, но мне все равно приходится перезагружать веб-страницу, чтобы увидеть новую запись в сетке.   -  person martskins    schedule 20.01.2012
comment
Какой браузер? Можно использовать firebug, чтобы проверить, что возвращает загрузка хранилища.   -  person Chewpers    schedule 20.01.2012
comment
firefox, я проверю и вернусь к вам   -  person martskins    schedule 20.01.2012
comment
Мне удалось обновить сетку, единственная проблема теперь в том, что когда я перезагружаю сетку, она показывает столбец, который должен быть скрыт   -  person martskins    schedule 20.01.2012
comment
Как вы скрыли этот столбец через модель столбца? если вам не нужен столбец, не определяйте для него столбец в модели столбцов. было бы полезно, если бы вы могли опубликовать весь код при создании экземпляра gridpanel   -  person CincauHangus    schedule 15.02.2012


Ответы (4)


Это определенно должно работать:

Ext.getCmp('myGridID').getStore().load();

Получаете ли вы какие-либо ошибки javascript при использовании вышеуказанного синтаксиса? Если это так, просмотр конкретного сообщения об ошибке может дать некоторые подсказки.

Кроме того, ВСЕГДА ВСЕГДА используйте инструменты разработчика Chrome (или панель инструментов разработчика Firebug или IE, если вам нравится Firefox/IE). В этом случае вы хотите увидеть, отправляется ли запрос AJAX на /url/to/my/json/encoded/results. Это, по крайней мере, скажет вам, поступает ли вызов для обновления хранилища на ваш сервер.

Я предполагаю, что это не так, и у вас, скорее всего, генерируется сообщение об ошибке. Вероятно, что-то вроде «Невозможно вызвать метод getStore неопределенного»

Это, по крайней мере, сообщит вам, что вы не можете успешно получить ссылку на свою сетку. Оттуда убедитесь, что вы не дублировали «myGridID» для другого элемента или что-то в этом роде.

Вы можете вывести некоторую информацию в консоль инструментов разработчика Chrome, чтобы помочь в отладке, начиная с:

console.log(Ext.getCmp('myGridID'));

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

Если он успешно возвращает ссылку на компонент сетки, продолжайте двигаться по строке:

console.log(Ext.getCmp('myGridID').getStore());

В любом случае, это, вероятно, слишком много объяснений для того, что вы, вероятно, уже решили. Хотя, возможно, это будет полезно кому-то еще.

person rhinst    schedule 16.02.2012

Попробуйте это, это сработало для меня, проверено на версии 3.x

Ext.getCmp('idMyGrid').store.load();

также вы можете использовать

Ext.getCmp('idMyGrid').store.reload();

если вы хотите передать параметры с запросом на загрузку хранилища

Ext.getCmp('idMyGrid').store.load({params: {paramName: paramValue}}); Ext.getCmp('idMyGrid').store.reload({params: {имя_параметра: значение_параметра}});

person Mohammad AlQanneh    schedule 13.05.2013

если вы хотите перезагрузить свои данные, вы должны увидеть изменения. Я имею в виду, соедините эти коды вместе:

 Ext.getCmp('idMyGrid').getStore().load();
 Ext.getCmp('idMyGrid').getView().refresh();

Это работа для меня. Я надеюсь, что это сработает и для вас.

Из Чили чоризо, Салудс.

person Loko Fer    schedule 19.12.2012

см. мой код:

var ответ = Ext.decode (результат); // JSON откуда-то

store.proxy = новый Ext.ux.data.PagingMemoryProxy (ответ);

grid.store = магазин;

store.load({параметры: {начало: 0, лимит: 20} });

сетка.getView().обновить();

person Yuttapol    schedule 27.06.2012