0

サーバーからデータをcombobox入力する必要があります。サーバー側では、次のデータを表示します。

PersonID
PersonFName
PersonLName

コンボボックスでは、テキストをPersonFName + PersonLName(Like James Smith- This is what it will display in the drop down) として表示する必要があり、ユーザーがレコードを選択すると、対応する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+を表示するが、フィールドを値として保持する方法だと思います。PersonLNamePersonID

データモデルの名前と名前を結合する変換済みフィールドを追加してから、そのフィールドをコンボボックス構成にする必要があります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 に答える