我有一个面板,我在标题中有一个按钮,可以帮助我在该面板中添加两个文本字段。现在当我点击这个按钮时,它会弹出一个弹出窗口,用户输入它想要的两个文本字段的值,然后单击此弹出面板标题中的保存按钮。
添加了两个文本字段,但该值未设置为在弹出窗体中输入的值。我认为问题在于范围。请查看以下代码并告诉我如何解决此问题。
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();
}
}]
}
答案 0 :(得分:2)
有一些东西可以帮助你在这里,但首先是不打扰跟踪组件中的唯一ID。让ExtJS为您处理。此外,删除嵌套的处理程序将使您的代码更容易阅读。我把this fiddle放在一起,展示了你如何做到这一点。
如果不使用ID,您可以使用类似于saveBtn.up('panel')
的向上/向下选择器来获取对父/子组件的引用。
您还可以在弹出窗口中添加表单,以便于选择。希望这有助于让您了解更好地利用框架的方法。