0

我有一个combobox,我需要从服务器填充数据。在服务器端,我要显示以下数据。

PersonID
PersonFName
PersonLName

在组合框中,我需要将文本显示为PersonFName + PersonLName(Like James Smith- 这是它将在下拉列表中显示的内容),当用户选择一条记录时,我需要显示相应的PersonID(Like Person with PersonFNameand PersonLNamehas the PersonID of 1)该用户的。

我无法弄清楚,这是我的代码

看法 :

{
                    xtype: 'combobox',
                    id: 'personcombo',
                    readOnly: false,
                    selectOnFocus: true,
                    forceSelection: true,
                    store: 'Person'  
            }

店铺 :

Ext.define('MyApp.store.PersonStore', {
    extend: 'Ext.data.Store',
    requires: [
        'MyApp.model.Person'
    ],

    constructor: function(cfg) {
        var me = this;
        cfg = cfg || {};
        me.callParent([Ext.apply({
            model: 'MyApp.model.Person',
            proxy: {
                type: 'ajax',
                api: {
                    read: 'person.php',
                    create: 'person.php'
                },
                reader: {
                    type: 'array'
                }
            }
        }, cfg)]);
    }
});

模型 :

Ext.define('MyApp.model.Person', {
    extend: 'Ext.data.Model',

    fields: [
        {
            name: 'PersonID'
        },
        {
            name: 'PersonFName'
        },
        {
            name: 'PersonLName'
        }
    ]
});
4

2 回答 2

3

我认为您的问题是:如何在组合框中显示PersonFName+PersonLName但将PersonID字段保留为值。

您应该添加一个转换后的字段,它将数据模型中的名字和姓氏连接起来,然后将其设为您的组合框displayField配置。

尽管另一个答案确实提出了一个很好的观点,即组合中定义的商店是,Person但您正在显示名为PersonStore.

它看起来像这样:

模型:

Ext.define('MyApp.model.Person', {
    extend: 'Ext.data.Model',

    fields: [
        {
            name: 'PersonID'
        },
        {
            name: 'PersonFName'
        },
        {
            name: 'PersonLName'
        },
        {
            name: 'PersonName',
            convert: function(value, record) {
                return record.data.PersonFName + ' ' + 
                    record.data.PersonLName;
            }
        }
    ]
});

店铺:

// changed to "Person" instead of "PersonStore"
Ext.define('MyApp.store.Person', {
    extend: 'Ext.data.Store',
    requires: [
        'MyApp.model.Person'
    ],

    model: 'MyApp.model.Person',
    proxy: {
        type: 'ajax',
        api: {
            read: 'person.php',
            create: 'person.php'
        },
        reader: 'array'
    }
});

看法:

{
    xtype: 'combobox',
    id: 'personcombo',
    readOnly: false,
    selectOnFocus: true,
    forceSelection: true,
    store: 'Person',
    valueField: 'PersonID',
    displayField: 'PersonName' // the converted field

}
于 2012-08-02T16:30:59.313 回答
0

您的组合框将“Person”作为商店,但我没有看到您在任何地方创建名为 Person 的商店。试试store: Ext.create('MyApp.store.PersonStore', {autoLoad: true})

您还可以简化您的商店:

Ext.define('MyApp.store.PersonStore', {
    extend: 'Ext.data.Store',
    requires: [
        'MyApp.model.Person'
    ],

    model: 'MyApp.model.Person',
    proxy: {
        type: 'ajax',
        api: {
            read: 'person.php',
            create: 'person.php'
        },
        reader: 'array'
    }
});
于 2012-08-02T11:24:44.067 回答