2016-07-01 2 views
1

Я написал свой компонент Ajax в init, и я получаю все требуемые данные в this.store. Но я не получаю область хранения в сетке, где я определил. Поскольку я закрываю скобки Ajax Success, я не являюсь. что это правильный способ сделать. Мой код:Как получить область хранения в сетке

initComponent: function() { 
    this.fields = []; 
    this.columns = []; 
    this.data = []; 
    this.store = []; 
    Ext.Ajax.request({ 
         url: 'XML/1Cohart.xml', 
         scope: this, 
         timeout: global_constants.TIMEOUT, 
         method: "GET", 
         disableCaching: true, 
         failure: function(response) { 
          utils.showOKErrorMsg(sdisMsg.ajaxRequestFailed); 
         }, 
         success: function(response) { 
          var datas = response.responseXML; 
          Ext.each(datas.getElementsByTagName("HEADER"), function(header) { 
           this.buildField(header); 
           this.buildColumn(header); 
          }, this); 
          Ext.each(datas.getElementsByTagName("G"), function (columnData) { 
           this.buildData(columnData); 
           this.fieldLength = this.fields.length; 
           this.record = []; 
           for (i = 0; i < this.fieldLength; i++) { 
            //debugger; 
            var fieldName = this.fields[i].name 
            this.record[i] = columnData.getAttribute(fieldName); 
           } 
           this.data.push(this.record);     
          }, this); 
          this.store = new Ext.data.ArrayStore({ 
           fields : this.fields 
          }); 
          this.store.loadData(this.data); // Getting correct data in this.store 
         }, 
        }); 

В одном компоненте инициализации в восточной панели я определено сетку. для которого столбец идет, но магазин не получает.

сетки код

  { 
      xtype: 'panel', 
      region: "east", 
      header: true, 
      collapsible: true, 
      autoScroll: true, 
      //columnWidth: 0.5, 
      width: "30%", 
      hideBorders: true, 
      split: true, 
      items: [{ 
       xtype: 'panel', 
       title: "Search Result", 
       height:500, 
       items: [{ 
        xtype: 'grid', 
        itemid: 'ABC_GRID', 
        store : this.store, 
        autoHeight: true, 
        sm: new Ext.grid.CheckboxSelectionModel({singleSelect:true}), 
        frame: true, 
        columns : this.columns, 
       }] 

      }]   
+0

'initComponent' вызывается, на каком компоненте? Где определяется код сетки? –

+0

Сетка также находится в компоненте init. Я теряю объем «this.store» только в успехе Ajax. – David

ответ

0

После загрузки данных в this.store получить сетку и перенастроить его магазин

Ext.ComponentQuery.query("#ABC_GRID")[0].reconfigure(this.store); 

Для ExtJS 3

Мы должны использовать Ext.getCmp() в Ext.ComponentQuery.query является не поддерживается. Необходимо определить id свойство сетки как id:ABC_GRID.

Ext.getCmp("ABC_GRID").reconfigure(this.store) 
+0

Итак, где я объявляю свою сетку, я должен оставить пустую в магазине? – David

+0

Жаль, что я пробовал, но не работал. Даже не останавливайтесь на отладчике. – David

+0

Ext.ComponentQuery.query не доступен в EXTJS 3. – David

-1

Вместо того, чтобы вызывать This.store вы можете вызвать grid.getview(). GetStore(), вы получите магазин сети, где вы хотите, чтобы загрузить данные.

Смежные вопросы