2013-02-08 71 views
2

我希望有人帮助我。Extjs 4如何将xml数据从服务器返回给extjs控制器?

我想在本地加载我的网格与xml文件的数据。 我创建了模型,商店和网格。我在网格渲染事件中加载商店。

问题是, 存储被加载,但网格仍为空。我在控制台上查看了网格,网格项包含加载的数据,但网格不包含屏幕上的数据。

这里是模型

Ext.define('BTOM.model.test.test', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     { name: 'id', type: 'string' }, 
     { name: 'name', type: 'string' }, 
     { name: 'phone', type: 'string' } 
    ] 
}); 

这里是商店

Ext.define('BTOM.store.test.test', { 
    extend: 'Ext.data.Store', 
    model: 'BTOM.model.test.test', 
    autoLoad: false, 

    proxy: { 
     type: 'memory', 
     reader: { 
      type: 'xml', 
      root: 'users', 
      record: 'user' 
     } 
    } 
}); 

和电网

Ext.define('BTOM.view.test.test', { 
    extend: 'Ext.grid.Panel', 
    store: 'BTOM.store.test.test', 
    alias: 'widget.test', 
    title: 'Test', 

    initComponent: function() { 

     this.columns = 
     [ 
      { header: "Id", width: 120, dataIndex: 'id', sortable: false }, 
      { header: "Name", width: 180, dataIndex: 'name', sortable: false }, 
      { header: "Phone", width: 115, dataIndex: 'phone', sortable: false} 
     ]; 

     this.callParent(arguments); 
    }, 
}); 

而且在那里我装载存储是

render: function (grid, eOpts) { 
    var store = grid.getStore(); 
    var data = 
     '<?xml version="1.0" encoding="utf-8"?>' + 
      '<users> ' + 
       '<user><id>1</id><name>Bll QASD</name><phone>333 2211</phone></user> ' + 
       '<user><id>2</id><name>Asd QWF</name><phone>444 2211</phone></user> ' + 
       '<user><id>3</id><name>Zas QWE</name><phone>555 2211</phone></user> ' + 
      '</users>'; 
     var dataXml = (new DOMParser()).parseFromString(data, 'text/xml'); 
    console.log(dataXml); 
    store.loadRawData(dataXml, true); 
    console.log(grid); 

}

dataXML文档创建时没有问题。 网格似乎包含数据(通过萤火虫,我可以看到) 但datagrid是空的,不显示数据!

回答

0

好的,错误是你正在定义商店,但没有创建它。 所以网格只是商店的名称,但它期望一个商店实例, 或者是你在上面的代码片段中遗漏的一些东西。 我使用了相同的代码,这里是一个运行示例: https://fiddle.sencha.com/#fiddle/oel