Как передать данные json с контроллера для просмотра в EXTJS 4.0

#extjs

#extjs

Вопрос:

У меня есть поле со списком, объявленное внутри моей сетки

 header: '<b>Reasons</b>',
            width : 150,
            editor:
                {
                    xtype: 'combobox',
                    store: 'reasonstore',
                    displayField: 'displayText',
                    valueField: 'value',
                    queryMode: 'local',

                }
  

и мой магазин

var reasonstore = Ext.create(‘Внешние данные.Сохранить’, { поля: [‘DisplayText’, ‘value’], идентификатор: ‘resonstoreid’ });

Я выполнил вызов rest и получил свои jsondata в контроллере

 successCallback:function(json){
            var mydata = json.reason;
Ext.getCmp('resonstoreid').getStore().loadData(json.reason);
  

но я получаю Ext.getCmp(‘resonstoreid’) не определен.
мое представление загружается только сначала, а затем контроллер.
итак, как загрузить эти данные json с контроллера для просмотра.

Ответ №1:

Вы должны использовать Ext.getStore(«xxx»), чтобы получить ссылку на ваш магазин! Это должно решить вашу проблему.

 var store = Ext.getStore("resonstoreid");
store.loadData(json.reason);
  

Другой совет

Вместо того, чтобы выполнять вызов AJAX и заполнять хранилище, loadData(xxx) используйте load() функцию хранилища. Смотрите здесь: Ext.data.Хранить.загружать

Сделайте это, чтобы конфигурация вашего хранилища выглядела следующим образом

 //create File store/Reasons.js 
Ext.define('XYZ.store.Reasons', {  //XYZ ... you namespace
    extend: 'Ext.data.Store',

    fields: ['displayText', 'value'], 
    id : 'Reasons',
    autoLoad: true,
    proxy: {
        type: 'ajax',
        actionMethods:  {create: 'POST', read: 'GET', update: 'POST', destroy: 'POST'},
        url: 'xxx',
        method: 'POST',            

        reader: {
            type: 'json',
            root: 'data'
        }
    }
});
  

После этого вы можете сделать это:

 var store = Ext.getStore("Reasons");
store.load(
    params: {
        group: 3,
        type: 'user'
    },
    callback: function(records, operation, success) {
        // do something after the load finishes
    },
    scope: this
});
  

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

Комментарии:

1. Спасибо за lott…it worked..bt теперь, когда я выбираю значение из поля со списком, после выбора отображается поле значения вместо поля отображения… любые предложения по этому поводу, пожалуйста…

2. Обычно это указывает на то, что хранилище со списком не загружено или запись с этим значением не найдена.

3. Посмотрите, правильно ли загружены данные. В консоли попробуйте это store = Ext.getStore(«resonstoreid»); store.data.items[0].data; Каков результат?