6

我有一个带有用 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);
            }
        }]
    });
});

我得到的错误是

未捕获的类型错误:无法调用未定义的方法“getForm”。

但是,如果我在 for 循环中使用固定值,例如 5,我将获得所需的输出。我正在使用分机 3.2.1

4

2 回答 2

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();
于 2012-04-19T20:54:40.400 回答
0

getCmp() 接受 id 作为参数而不是变量。为解决问题,将 id 提供给表单面板,并将该 id 包含在 getCmp() 内的引号中。

它可能会奏效,但无论如何,正如 phat skat 正确指出的那样,您的代码非常难以阅读

于 2012-12-20T20:35:06.743 回答