我有一个带Extjs设计按钮的网页。当用户单击其中一个按钮时,会出现一个带有文本字段和下一个按钮的窗口。单击下一个按钮将加载另一个带有字段集的窗口,隐藏第一个窗口。第二种形式的场集的数量将根据第一窗口中的用户输入进行调整。我正在尝试使用for循环。 我使用的代码如下:
var win1, win 2, j;
var win1items = new Ext.form.FormPanel({
//snip
items: [{
xtype: 'fieldset',
defaultType: 'textfield',
items: [{
fieldLabel: 'Number',
allowBlank: false,
name: 'Number',
width: 110,
cls:"txtfield"
}]
}],
buttons: [{
text: 'Next',
handler: function(){
if(!win2){
winc2 = new Ext.Window({
//snip
items: [win2items]
});
}
win2.show(this);
win1.hide();
}
}]
});
j = Ext.getCmp('win1').getForm().findField("Number").getValue();
var fldComs = [];
for (i=0; i<=j; i++){
fldComs[i] = new Ext.form.FieldSet({
//snip
items: [{
//snip
}]
});
}
win2items = new Ext.form.FormPanel({
//snip
items: [fldComs]
});
Ext.onReady(function(){
new Ext.Toolbar({
renderTo: document.body,
items: [{
xtype: 'tbbutton',
text: 'Start Here',
cls: 'menu-icon',
handler: function(){
if(!win1){
win1 = new Ext.Window({
//snip
items: [win1items]
});
}
win1.show(this);
}
}]
});
});
我得到的错误是
未捕获的TypeError:无法调用未定义的方法'getForm'。
但是如果我在for循环中使用固定值,比如5我得到了所需的输出。我正在使用Ext 3.2.1
答案 0 :(得分:10)
你的代码充满了无法工作的理由 - 我不是故意的,但从故障排除的角度来看,很难说出真正的问题在哪里有如此多的猜测工作 - 我看到的东西:
1)你对Ext.getCmp('win1')的调用失败,因为没有任何id为'win1'的东西 - 试试:
var win1items = new Ext.form.FormPanel({
id: 'win1'
...
2)如果你想让'win1'的id在你在处理程序中创建的窗口上,你需要在那里指定,但是,正如MMT所指出的,Ext.Window没有getForm()方法(所以我怀疑这是你想要做的)。
3)如果你想要那个文本字段的值,只需按照简单的方式进行操作,并给该字段一个ID:
[{
label: 'Number',
xtype: 'textfield',
id: 'MyNumberField'
}]
...
var j = Ext.getCmp('MyNumberField').getValue();
答案 1 :(得分:0)
getCmp()接受id作为参数而不是变量。解决问题给表单面板提供id并在getCmp()中包含该引号。
它可能会有用,但无论如何你的代码是非常难以理解的,正如phat skat正确指出的那样