在ExtJS 4中使用json数据加载组合框

时间:2011-10-11 13:12:41

标签: extjs4

我只想尝试使用基本数据存储将一些json数据加载到我的组合框中。这是我的json数据:

{"services": [{"id": 1, "name": "dropbox"}, {"id": 2, "name": "facebook"}, {"id": 3, "name": "twitter"}]}

这是我的extjs 4代码:

Ext.onReady(function(){
    Ext.define('ServiceList', {
    extend: 'Ext.data.Model',
    fields: [
        'id', 'name'
    ]
});

var store = Ext.create('Ext.data.Store', {
    model: 'ServiceList',
    proxy: {
        type: 'json',
        url: '/account/service/list',
        reader: {
            root: 'services',
            totalProperty: 'totalCount'
        }
    }
});
store.load();

Ext.create('Ext.panel.Panel', {
    layout: 'auto',
    title: 'VAC',
    width: '100%',
    renderTo: 'vac-app-window',
    items: [{
        xtype: 'tabpanel',
        autoTabs:true,
        activeTab: 0,
        border:false,
        defaults: {autoHeight:true, bodyStyle:'padding:10px'},
        items: [{
            title: 'Data Services',
            items: [{
                xtype:'combo',
                store:store
            }]
        }]
    }]
});
});

一切都在localhost上完成,所以没有跨域的东西。我一直在阅读文档但是无法弄清楚我做错了什么。

一如既往,我们非常感谢任何提示!

更新

我编辑了对数据存储区的一些更改,并且进一步了解:

Ext.define('ServiceList', {
    extend: 'Ext.data.Model',
    fields: [
        {name:'id', type:'int'},
        {name:'name', type:'string'}
    ]
});

var store = Ext.create('Ext.data.Store', {
    model: 'ServiceList',
    proxy: {
        type: 'ajax',
        url: '/account/service/list',
        reader: {
            root: 'services',
            type: 'json'
        }
    }
});
store.load();

现在当页面加载或我试图点击组合框时,它正在寻址的网址是:

GET / account / service / list?_dc = 1318340688155& page = 1& start = 0& limit = 25

从我的阅读中看起来像jsonp,但我不知道页面,开始和限制参数的来源是什么?

UPDATE2:

感谢Molecule Man的帮助,我能够解决这个问题:

Ext.onReady(function(){

    Ext.define('ServiceList', {
        extend: 'Ext.data.Model',
        fields: [
            {name:'id', type:'int'},
            {name:'name', type:'string'}
        ]
    });

    var store = Ext.create('Ext.data.Store', {
        model: 'ServiceList',
        autoLoad: true,
        proxy: {
            limitParam: undefined,
            startParam: undefined,
            paramName: undefined,
            pageParam: undefined,
            noCache:false,
            type: 'ajax',
            url: '/account/service/list',
            reader: {
                root: 'services'
            }
        }
    });

    Ext.create('Ext.panel.Panel', {
        layout: 'auto',
        title: 'VAC',
        width: '100%',
        renderTo: 'vac-app-window',
        items: [{
            xtype: 'tabpanel',
            autoTabs:true,
            activeTab: 0,
            border:false,
            defaults: {autoHeight:true, bodyStyle:'padding:10px'},
            items: [{
                title: 'Data Services',
                items: [{
                    xtype:'combo',
                    queryMode:'local',
                    emptyText: 'Select Service',
                    store:store,
                    displayField: 'name',
                    valueField: 'id'
                }]
            }]
        }]
    });
});

希望这有助于其他任何人:)

1 个答案:

答案 0 :(得分:3)

你的组合框'配置不包含displayField(默认为'text')和valueField(默认为displayField的值),这是必需的:

        items: [{
            xtype:'combo',
            displayField: 'name',
            valueField: 'id',
            store:store
        }]