无法设置文本字段的值,因为它不在范围内

时间:2015-05-14 11:14:25

标签: button extjs scope panel

我有一个面板,我在标题中有一个按钮,可以帮助我在该面板中添加两个文本字段。现在当我点击这个按钮时,它会弹出一个弹出窗口,用户输入它想要的两个文本字段的值,然后单击此弹出面板标题中的保存按钮。

添加了两个文本字段,但该值未设置为在弹出窗体中输入的值。我认为问题在于范围。请查看以下代码并告诉我如何解决此问题。

                    xtype: "panel",
                    id: 'idFieldpanel',
                    ...
                    header:{
                        titlePosition: 0,
                        items:[{
                            xtype:'button',
                            text: 'Add',
                            handler: function(){
                                var addidFieldPanel= new Ext.form.Panel({
                                    id: 'newidFieldPanel',
                                    width: 250,
                                    height: 100,
                                    floating: true,
                                    closable : true,
                                    layout : {
                                        type : 'vbox',
                                        align : 'stretch'
                                    },
                                    bodyPadding: 10,
                                    items : [
                                    {
                                        xtype : 'textfield',
                                        id : 'newidFieldname',
                                        fieldLabel : 'Name',
                                        name : 'newidFieldname',
                                        flex : 1,
                                        scope : this
                                    },
                                    {
                                        xtype : 'textfield',
                                        id : 'newidFielddataType',
                                        fieldLabel : 'DataType',
                                        name : 'newidFielddataType',
                                        flex : 1,
                                        scope : this
                                    }
                                    ],
                                     header : {
                                        titlePosition : 1,
                                        items : [{
                                            xtype: 'button',
                                            text: 'Save',
                                            handler: function() {
                                                    ctr++; //this is used so that the id of the added fields do not match and hence they do not overlap
                                                    Ext.getCmp('idFieldpanel').add({
                                                        xtype:"container",
                                                        layout : {
                                                            type : 'hbox',
                                                            align : 'stretch'
                                                        },
                                                        defaults: {
                                                            bodyPadding: 10,
                                                            margin: '10 0 10 10'

                                                        },
                                                        items: [
                                                        {
                                                            xtype : 'textfield',
                                                            fieldLabel: 'Name',
                                                            id: 'idFieldName' + ctr,
                                                            name : 'Data',
                                                            margin:'0 10 10 0',
                                                            flex : 1,
                                                            height : 'auto'
                                                        },
                                                        {
                                                            xtype : 'textfield',
                                                            fieldLabel: 'Datatype',
                                                            name : 'Type',
                                                            id: 'idFielddataType' + ctr,
                                                            margin: '0 10 10 0',
                                                            flex : 1,
                                                            height : 'auto'
                                                        }
                                                        ]
                                                    });

                                                    Ext.getCmp('idFieldName' + ctr).setValue(Ext.getCmp('newidFieldname').getValue());
                                                    Ext.getCmp('idFielddataType' + ctr).setValue(Ext.getCmp('newidFielddataType').getValue());
                                                }
                                            }]
                                         }
                                        })
                                    addidFieldPanel.show();
                                }
                            }]
                        }

1 个答案:

答案 0 :(得分:2)

有一些东西可以帮助你在这里,但首先是不打扰跟踪组件中的唯一ID。让ExtJS为您处理。此外,删除嵌套的处理程序将使您的代码更容易阅读。我把this fiddle放在一起,展示了你如何做到这一点。

如果不使用ID,您可以使用类似于saveBtn.up('panel')的向上/向下选择器来获取对父/子组件的引用。

您还可以在弹出窗口中添加表单,以便于选择。希望这有助于让您了解更好地利用框架的方法。