6

Extjs で設計されたボタンを含む Web ページがあります。ユーザーがこれらのボタンの 1 つをクリックすると、ウィンドウが表示され、テキスト フィールドと [次へ] ボタンが表示されます。次のボタンをクリックすると、フィールドセットを含む別のウィンドウがロードされ、最初のウィンドウが非表示になります。2 番目のフォームのフィールドセットの数は、最初のウィンドウでのユーザー入力に従って調整されます。これには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 を使用しています

4

2 に答える 2

10

あなたのコードはそれが機能しない理由でいっぱいです - 私は意地悪をしようとしているわけではありませんが、トラブルシューティングの観点からは、多くの推測作業で本当の問題がどこにあるのかを知るのは難しいです - 私が見ているもの:

1) Ext.getCmp('win1') への呼び出しは、'win1' の ID を持つものがないため失敗します - 試してください:

    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() 内の引用符で囲みます。

うまくいくかもしれませんが、ファットスカットが正しく指摘したように、とにかくあなたのコードは非常に読みにくいです

于 2012-12-20T20:35:06.743 に答える