从组合加载表单

发布于 2024-12-02 06:48:38 字数 2838 浏览 0 评论 0原文

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

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

任何帮助将不胜感激。

这是代码:

型号:

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);
    }
});

I'm trying to load a form from a record selected in a combo.

The store is loaded properly and the combo is populated, but, when I select a value from combo, form fields remain empty.

Any help will be appreciated.

This is the code:

Model:

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'
    }
}
});

Store:

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

Class:

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);
    }
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

雪若未夕 2024-12-09 06:48:38

这是来自 select 事件的文档

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

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

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

PS 顺便说一句,您有两个带有 name: 'name' 的字段。

This is from the documentation for the select event:

select( Ext.form.field.ComboBox combo, Array records, Object eOpts )

Notice that the second parameter is an Array. But in your example the second parameter is an Ext.data.Record. You are treating array as a record. Modify your loadForm to make it process arrays of records:

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

P.S. By the way you have two fields with name: 'name'.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文