it-roy-ru.com

Перезагрузка данных из магазина в 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, но он ничего не делает.

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

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

6
lascort

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

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

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

15
rhinst

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

9
Mohammad AlQanneh

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

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

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

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

2
Loko Fer

смотри мой код:

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

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

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

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

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

0
Yuttapol