2012-08-24 55 views
1

我有一個網格,我試圖從一個XmlStore填充Xml String。到目前爲止,商店似乎正在加載XML,但我無法獲取網格來加載商店。 (即grid.getStore()getCount將()始終爲0ExtJS Grid不從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' 
}); 

我的XML如下:

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 

我然後使用內存代理XML閱讀器定義我的商店:

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

然後解析XML DOM加載進店:

eioaGridStore.loadRawData(gridDataXml); 

如果我getCount將()在商店,它正確地與2

從Web檢查查看商店響應顯示2門陣列(我想在我的網格行)(原諒格式)

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 

我的網格組件如下:

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' 
      }] 
     }] 
    }; 
} 

後來,後來我getCount將()通過網格的存儲和它回來爲空。

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

任何想法?被困了好幾天了,我瘋了!謝謝。

回答

0

我剛剛發現它...當設置網格商店時,對this.eioaGridStore的引用:不在範圍內(未定義)......現在一切正常。

1

只是一個瘋狂的猜測,因爲我沒有加載你的代碼,但可能會從商店定義中刪除自動加載,因爲你正在手動做?