2012-08-24 1 views
1

J'ai une grille que j'essaie de remplir à partir d'un XmlStore, qui est rempli à partir d'une chaîne Xml. Jusqu'à présent, le magasin semble bien charger le XML, mais je ne peux pas obtenir la grille pour charger le magasin. . (C.-à-grid.getStore() getCount() est toujours 0.La grille ExtJS ne charge pas les données depuis Ext.data.XmlStore

// create the Data Stores for use by the grid 
Ext.define('InterfaceModel', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     { name: 'id', mapping: 'id' }, 
     { name: 'InterfaceName', mapping: 'InterfaceName' }, 
     { name: 'TX_OCTETS', mapping: 'TX_OCTETS' }, 
     { name: 'TX_BAD_OCTETS', mapping: 'TX_BAD_OCTETS' }, 
     { name: 'TX_FRM', mapping: 'TX_FRM' }, 
     { name: 'TX_BAD_FRM', mapping: 'TX_BAD_FRM' }, 
     { name: 'TX_MCAST', mapping: 'TX_MCAST' }, 
     { name: 'TX_BCAST', mapping: 'TX_BCAST' }, 
     { name: 'TX_PAUSE', mapping: 'TX_PAUSE' } 
    ], 
    idProperty: 'id' 
}); 

Mon XML est la suivante:

var gridData = '<?xml version="1.0" encoding="UTF-8"?> <Interfaces> <Interface> <id>1</id> <InterfaceName>GMAC1</InterfaceName> <TX_OCTETS>123234</TX_OCTETS> <TX_BAD_OCTETS>234</TX_BAD_OCTETS> <TX_FRM>234234</TX_FRM> <TX_BAD_FRM>2341</TX_BAD_FRM> <TX_MCAST>23</TX_MCAST> <TX_BCAST>56</TX_BCAST> <TX_PAUSE>8</TX_PAUSE></Interface> <Interface> <id>2</id> <InterfaceName>GMAC2</InterfaceName> <TX_OCTETS>123234</TX_OCTETS> <TX_BAD_OCTETS>234</TX_BAD_OCTETS> <TX_FRM>234234</TX_FRM> <TX_BAD_FRM>2341</TX_BAD_FRM> <TX_MCAST>23</TX_MCAST> <TX_BCAST>56</TX_BCAST> <TX_PAUSE>8</TX_PAUSE></Interface></Interfaces>'; 

var gridDataXml = (new DOMParser()).parseFromString(gridData,'text/xml'); 

console.log ('xml', gridDataXml); // everything looks fine 

Je définit alors mon magasin à l'aide d'un lecteur XML proxy mémoire:

var eioaGridStore = new Ext.data.XmlStore({ 
    model: 'InterfaceModel', 
    autoLoad: true, 
    proxy: { 
     type: 'memory', 
     reader: { 
      type: 'xml', 
      root: 'Interfaces', 
      record: 'Interface', 
      idProperty: 'id' 
     } 
    } 
}); 

Et puis chargez le DOM XML analysé dans le magasin:

eioaGridStore.loadRawData(gridDataXml); 

Si le magasin, il répond correctement avec 2.

Voir la boutique de l'inspecteur Web montre 2 tableaux (que je veux être rangées dans ma grille) (pardonnez le formatage)

I getCount()
store 
Object 
data: Object 
allowFunctions: false 
events: Object 
generation: 3 
getKey: function (record) { 
hasListeners: Object 
items: Array[2] 
0: Object 
data: Object 
dirty: false 
events: Object 
hasListeners: Object 
id: "InterfaceModel-1" 
internalId: "1" 
modified: Object 
phantom: false 
raw: Element 
store: Object 
stores: Array[1] 
__proto__: Object 
1: Object 
length: 2 
__proto__: Array[0] 
keys: Array[2] 
length: 2 
map: Object 
sorters: Object 
__proto__: Object 
events: Object 
eventsSuspended: 0 
filters: Object 
groupers: Object 
hasListeners: Object 
model: function i() {return this.constructor.apply(this,arguments)||null;} 
modelDefaults: Object 
pageSize: 25 
proxy: Object 
removed: Array[0] 
sorters: Object 
totalCount: 2 
__proto__: Object 

Mon composant grille est la suivante:

createGrid: function() { 
    var me = this; 

    return { 
     id: 'eioaGrid', 
     xtype: 'grid', 
     border: true, 
     store: this.eioaGridStore, 
     columns: [{ 
      header: 'Interface', 
      dataIndex: 'InterfaceName', 
      align: 'center', 
      sortable: true, 
      tooltip: 'Axxia Interface' 
     }, { 
      text: 'OCTETS', 
      sortable: false, 
      width: 100, 
      tooltip: 'Total number of octets in all frames.', 
      columns: [{ 
       header: 'TX', 
       width: 50, 
       align: 'center', 
       sortable: true, 
       dataIndex: 'TX_OCTETS', 
       tooltip: 'Transmitted' 
      }] 
     }, { 
      text: 'BAD OCTETS', 
      sortable: false, 
      width: 100, 
      tooltip: 'Total number of octets in all bad frames.', 
      columns: [{ 
       header: 'TX', 
       width: 50, 
       align: 'center', 
       sortable: true, 
       dataIndex: 'TX_BAD_OCTETS', 
       tooltip: 'Transmitted' 
      }] 
     }, { 
      text: 'FRAMES', 
      sortable: false, 
      width: 100, 
      tooltip: 'Total number of frames.', 
      columns: [{ 
       header: 'TX', 
       width: 50, 
       align: 'center', 
       sortable: true, 
       dataIndex: 'TX_FRM', 
       tooltip: 'Transmitted' 
      }] 
     }, { 
      text: 'BAD FRAMES', 
      sortable: false, 
      width: 100, 
      tooltip: 'Total number of bad frames.', 
      columns: [{ 
       header: 'TX', 
       width: 50, 
       align: 'center', 
       sortable: true, 
       dataIndex: 'TX_BAD_FRM', 
       tooltip: 'Transmitted' 
      }] 
     }, { 
      text: 'MULTICAST', 
      sortable: false, 
      width: 100, 
      tooltip: 'Multicast Frames: good non-pause frames with a multicast destination address which is not the broadcast address.', 
      columns: [{ 
       header: 'TX', 
       width: 50, 
       align: 'center', 
       sortable: true, 
       dataIndex: 'TX_MCAST', 
       tooltip: 'Transmitted' 
      }] 
     }, { 
      text: 'BROADCAST', 
      sortable: false, 
      width: 100, 
      tooltip: 'Broadcast Frames: good frames with the broadcast destination address.', 
      columns: [{ 
       header: 'TX', 
       width: 50, 
       align: 'center', 
       sortable: true, 
       dataIndex: 'TX_BCAST', 
       tooltip: 'Transmitted' 
      }] 
     }, { 
      text: 'PAUSE', 
      sortable: false, 
      width: 100, 
      tooltip: 'Pause Frames: pause frames internally generated by the MAC.', 
      columns: [{ 
       header: 'TX', 
       width: 50, 
       align: 'center', 
       sortable: true, 
       dataIndex: 'TX_PAUSE', 
       tooltip: 'Transmitted' 
      }] 
     }] 
    }; 
} 

Plus tard, je puis getCount() via le magasin de la grille et il revient aussi vide.

console.log('grid store count', Ext.getCmp('eioaGrid').store.getCount()); 

Des idées? J'étais perplexe depuis quelques jours et je deviens fou! Merci.

Répondre

0

Je viens de le trouver ... ma référence à this.eioaGridStore lors de la définition du magasin de la grille: n'était pas dans la portée (était indéfini) ... tout fonctionne maintenant.

1

Juste une supposition sauvage que je n'ai pas chargé votre code, mais peut-être supprimer l'autoload de la définition de magasin puisque vous le faites manuellement?

Questions connexes