从组合加载表单

时间:2011-08-30 15:44:25

标签: combobox extjs4

我正在尝试从组合中选择的记录加载表单。

正确加载商店并填充组合,但是,当我从组合中选择一个值时,表单字段保持为空。

任何帮助将不胜感激。

这是代码:

型号:

Ext.define('AA.model.proc.Process', {
    extend: 'Ext.data.Model',
    fields: [
     { name: 'name', type: 'string' },
     { name: 'owner', type: 'string' },
     { name: 'mail_dest', type: 'string' }
    ],
    proxy: {
     type: 'rest',
     url : 'data/camp.json',
     reader: {
        type: 'json',
        root: 'camp',
        totalProperty: 'count'
    }
}
});

存储

Ext.define('AA.store.proc.Process', {
    extend: 'Ext.data.Store',
    model: 'AA.model.proc.Process',
    requires: 'AA.model.proc.Process'
});

类别:

Ext.define('AA.view.proc.IM', {
    extend: 'Ext.window.Window',
    alias: 'widget.im',
    title: 'IM',
    layout: 'fit',
    height: 500,
    width: 400,
    autoShow: true,
    plain: true,
    modal: true,
    headerPosition: 'right',
    closable: false,
    initComponent: function () {
        this.items = [{
            xtype: 'form',
            fileUpload: true,
            width: 550,
            autoHeight: true,
            border: false,
            bodyStyle: 'padding:5px 5px 0',
            frame: true,
            labelWidth: 100,
            defaults: {
                anchor: '95%',
                allowBlank: false,
                msgTarget: 'side'
            },
            items: [{
                xtype: 'combo',
                name: 'name',
                store: 'procstore',
                fieldLabel: 'Name',
                valueField: 'name',
                displayField: 'name',
                width: 150,
                allowBlank: true,
                listeners: {
                    scope: this,
                        'select': this.loadForm
                }
            }, {
                xtype: 'textfield',
                fieldLabel: 'Name',
                name: 'name'
            }, {
                xtype: 'textfield',
                fieldLabel: 'Owner',
                name: 'owner'
            }, {
                xtype: 'textfield',
                fieldLabel: 'E-mail owner',
                name: 'mail_dest'
            }]
        }];
        this.buttons = [{
            text: 'Save',
            action: 'save'
        }, {
            text: 'Cancel',
            scope: this,
            handler: this.close
        }];
        this.callParent(arguments);
    },
    loadForm: function (field, record, option) {
        console.log(record)
        // firebug returns 
        //  $className "AA.model.proc.Process"
        //  $alternateClassName     "Ext.data.Record"
        console.log(this.down('form'))
        // firebug returns the right form panel
        this.down('form').loadRecord(record);
    }
});

1 个答案:

答案 0 :(得分:0)

这来自select事件的documentation

  

选择(Ext.form.field.ComboBox组合,数组记录,对象eOpts)

请注意,第二个参数是一个数组。但在您的示例中,第二个参数是Ext.data.Record。您正在将数组视为记录。修改您的loadForm以使其处理记录数组:

loadForm: function (field,records,option) {
    this.down('form').loadRecord(records[0]);
}

P.S。顺便说一句,你有两个name: 'name'字段。