extjs 组合框在单击时显示空白列表

Posted

技术标签:

【中文标题】extjs 组合框在单击时显示空白列表【英文标题】:extjs combo box shows blank list when clicked 【发布时间】:2021-06-08 18:24:46 【问题描述】:

我是 extjs 的新手,我试图从 API 调用返回的数据显示到组合框中,但由于某种原因,组合框没有显示“firstName”。组合框有一个空的下拉菜单,上面没有显示任何内容。请在下面找到代码。

组合框和创建商店的代码:

Ext.define('something....', 
    controller: 'some Controller',

    initComponent: function() 
        var me,
        me = this;

        me.items = [
            xtype: 'form',
            items: [
                xtype: 'combo',
                itemId: 'nameId',
                name:'nameId',
                labelAlign: 'top',
                fieldLabel: 'Name',
                store: me._getNames(),
                valueField:'dataId',
                displayField: 'name.firstName',
                editable: false
            ]
        ];
    

    _getNames: function ()
        var nameStore = Ext.create('Ext.data.Store', 
            autoLoad: true,
            proxy: 
                type: 'ajax',
                url: '/something/name.json',
                reader: 
                    type: 'json',
                    rootProperty:'',
                    transform: function (data) 
                        //console.log(data[0]); 
                        return data[0];
                    
                ,
            , 
            fields: ['dataId', 'name.firstName','nameDetails']
        );

        return namesStore;
    
)

我从 API 调用返回的结果(即 name.json)如下:

[
   
      "dataId":1,
      "name":
         "dataId":1,
         "firstName":"Julie",
         "code":"10",
         "connectionList":[
            "EMAIL"
         ]
      ,
      "nameDetails":
         "EMAIL":
            "dataId":1,
            "detail":"EMAIL"
         
      
   
]

我正在尝试显示 name.firstName。我怎样才能让它工作?对此的任何帮助都会很棒!

【问题讨论】:

【参考方案1】:

只需在阅读器的transform方法中编写适当的逻辑即可:

Ext.define('MyPanel', 
    extend: 'Ext.panel.Panel',
    layout: 'fit',
    
    initComponent: function () 
        this.items = [
            xtype: 'form',
            items: [
                xtype: 'combo',
                itemId: 'nameId',
                name: 'nameId',
                labelAlign: 'top',
                fieldLabel: 'Name',
                store: this._getNames(),
                valueField: 'dataId',
                displayField: 'firstName',
                editable: false
            ]
        ];
        this.callParent();
    ,

    _getNames: function () 
        var nameStore = Ext.create('Ext.data.Store', 
            autoLoad: true,
            proxy: 
                type: 'ajax',
                url: 'name.json',
                reader: 
                    type: 'json',
                    rootProperty: 'items',
                    transform: function (data) 
                        var data = 
                            items: [
                                dataId: data[0].dataId,
                                firstName: data[0].name.firstName,
                                nameDetails: data[0].nameDetails
                            ]
                        
                        return data;
                    
                ,
            ,
            fields: ['dataId', 'firstName', 'nameDetails']
        );

        return nameStore;
    
)

Ext.application(
    name: 'Fiddle',

    launch: function () 
        Ext.create('MyPanel', 
            title: "My Panel",
            width: 800,
            height: 600,
            renderTo: Ext.getBody()
        )
    
);

【讨论】:

如果从api返回的数组里面有不止一项,那么transform函数会如何变化呢?因为我相信 data[0] 只会返回第一个元素? 放一个循环并添加到项目数组中

以上是关于extjs 组合框在单击时显示空白列表的主要内容,如果未能解决你的问题,请参考以下文章

如何让组合框选择与 ExtJS6 中显示的值不同的值?

与 Ext.data.JsonStore 连接的 ExtJS 3 组合框不会在第二次 ++ 单击时打开

ExtJS 组合框未在面板中加载

extjs 表单元素中的 Extjs 组合框在禁用时未灰显

当组合框有焦点时显示下拉列表

组合框在 IE Extjs 中禁用时消失