如何在Extjs中使用网格显示JSON数据

时间:2013-11-10 22:51:56

标签: javascript json extjs extjs4

我是Extjs的新手,并不熟悉Javascript及其相关库。现在我想做的是:

  1. 向远程服务器发送GET请求,例如GET http://remote-restful-server.com/find/ {id}。

  2. 服务器将返回JSON格式的数据。数据如下:

    [{
        id: 1,
        level01: "Food",
        level02: null,
        level03: null,
        code: "XXXX",
        link: ABC1  
    },
    {
        id: 2,
        level01: "Food",
        level02: "Fruit",
        level03: null,
        code: "XXXX",
        link: ABC1  
    },
    ..., ...]
    
  3. 我想在extjs的夹点中显示这些数据。但是当我这样做时,我遇到了一些问题:

  4. 1){id}是从本页面的网址获取的第1步。如何使用Extjs在URL中获取参数?

    2)如何向restful Web服务发出GET请求并返回JSON数据?

    3)如何通过Extjs中的网格组件显示所有数据? JSON数组中所有元素的字段都是固定的。

    4)我希望网格中的某些列包含链接。怎么做?

    5)如何在显示之前对几个特定字段进行一些更改?

    我试图在阵列网格上显示json数据。但我失败了。看来我无法成功加载json数据。代码是:

    Ext.onReady(function() {
    
    
        // Define a product model
        Ext.define('Product', {
            extend: 'Ext.data.Model',
            fields: [
                {name: 'product_id', type: 'int'},
                'large_class_code',
                'medium_class_code',
                'small_class_code',
                'product_code',
                'large_class_name',
                'medium_class_name',
                'small_class_name',
                'product_name',
                'current_level',
                'current_code',
                'current_name',
                'parent_id',
                'parent_name',
                'has_standards'
            ]
        });
    
        // create the data store
        var store = Ext.create('Ext.data.Store', {
            model: 'Product',
            proxy: {
                type: 'ajax',
                url : 'http://xxx.xxx.xx.xxx:8080/product/all/',
                reader: {
                    type: 'json'
                }
            }
        });
    
        store.load();
        //console.log(store);
    
        // create the grid
        var grid = Ext.create('Ext.grid.Panel', {
            store: store,
            columns: [
                {id:'id',header: 'ID', width: 30, sortable: true, dataIndex: 'product_id'},
                {header: 'large_class_code', width: 100, sortable: true, dataIndex: 'large_class_code'},
                {header: 'medium_class_code', width: 100, sortable: true, dataIndex: 'medium_class_code'},
                {header: 'small_class_code', width: 100, sortable: true, dataIndex: 'small_class_code'},
                {header: 'product_code', width: 100, sortable: true, dataIndex: 'product_code'},
                {header: 'large_class_name', width: 100, sortable: true, dataIndex: 'large_class_name'},
                {header: 'medium_class_name', width: 100, sortable: true, dataIndex: 'medium_class_name'},
                {header: 'product_name', width: 100, sortable: true, dataIndex: 'product_name'},
                {header: 'current_level', width: 100, sortable: true, dataIndex: 'current_level'},
                {header: 'current_code', width: 100, sortable: true, dataIndex: 'current_code'},
                {header: 'current_name', width: 100, sortable: true, dataIndex: 'current_name'},
                {header: 'parent_id', width: 100, sortable: true, dataIndex: 'parent_id'},
                {header: 'parent_name', width: 100, sortable: true, dataIndex: 'parent_name'},
                {header: 'has_standards', width: 100, sortable: true, dataIndex: 'has_standards'}
            ],
            stripeRows: true,
            height:600,
            width:2000,
            renderTo: 'grid-example',
            title:'test list'
        });
    
    });
    

    可以显示网格,但不显示任何数据。我用chrome检查控制台:

    我得到了:

    选项http://xxx.xxx.xx.xxx:8080/product/all/?_dc=1384145304301&page=1&start=0&limit=25 Access-Control-Allow-Origin不允许原始http://xxx.xxx.xx.xxx

    XMLHttpRequest无法加载http://xxx.xxx.xx.xxx:8080/product/all/?_dc=1384145304301&page=1&start=0&limit=25。 Access-Control-Allow-Origin不允许原点http://xxx.xxx.xx.xxx

1 个答案:

答案 0 :(得分:2)

对于第1点和第2点,您可以阅读:Detailed documentation for ExtJS REST request / response handling?

对于第3点:如果您正在使用ExtJs4(并且您应该),网格将限制为商店,这就是您通过网格显示信息的方式http://docs.sencha.com/extjs/4.2.2/#!/guide/application_architecture

对于第4点和第5点,您可以在网格列上使用“渲染器”配置。

最好的问候。