2012-08-24 3 views
1

XML 문자열에서 채워지는 XmlStore에서 채우려 고하는 표가 있습니다. 지금까지는 저장소가 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 리더를 사용하여 내 가게를 정의

:

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

그리고 가게에 구문 분석 XML의 DOM을로드

I getCount()가 가게에, 제대로 2.

웹 인스펙터에서 가게를보기로 응답 (내 그리드의 행이 될 것인지)이 배열을 표시하는 경우

(서식을 용서)

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() 그리고 다시 비어 온다 다음과 같이

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 

내 그리드 구성 요소입니다.

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

아이디어가 있으십니까? 이제 며칠 동안 곤란을 겪었고, 나는 미쳐 버릴거야! 감사.

답변

0

방금 ​​발견했습니다. 그리드 저장소를 설정할 때 this.eioaGridStore에 대한 내 참조가 범위에 없습니다 (정의되지 않았습니다) ... 현재 모든 것이 작동합니다.

1

내가 코드를로드하지 않았지만 수동으로 수행하고 있기 때문에 저장소 정의에서 자동로드를 제거했을 수도 있습니다.

관련 문제