Перезагрузка данных из магазина в ExtJS 4 - PullRequest
6 голосов
/ 20 января 2012

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

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, но ононичего не делает.

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

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

Ответы [ 4 ]

15 голосов
/ 16 февраля 2012

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

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());

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

9 голосов
/ 13 мая 2013

Попробуйте, это сработало для меня, протестировано на версии 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: {paramName: paramValue}});

2 голосов
/ 20 декабря 2012

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

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

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

Из Чили чоризо, Saluds.

0 голосов
/ 27 июня 2012

см. Мой код:

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

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

grid.store = store;

store.load ({params: {start: 0, limit: 20}});

grid.getView () обновления ();.

...