0

クラス「IMS.SellMgt.testForm」を定義しました。ボタン「送信」をクリックすると、「var test = this.formPanel;」を取得したいのですが、なぜテストが null なのですか? this.formPanel を取得したい場合、どうすればよいですか?ありがとうございます!

    Ext.define('IMS.SellMgt.testForm', {
    formPanel: null,
    LoadForm: function () {
            this.formPanel = new Ext.form.Panel({
            renderTo: 'form-ct',
            frame: true,
            title: 'XML Form',
            width: 300,
            items: [{
                xtype: 'fieldset',
                title: 'Contact Information',
                defaultType: 'textfield',
                items: [{
                    fieldLabel: 'First Name',
                    emptyText: 'First Name',
                    name: 'first'
                }
            ]
            }],
            buttons: [{
                text: 'Submit',
                handler: function () {
                    var test = this.formPanel;
                        }
            }]
        });
    }
});

Ext.onReady(function () {
    var frmTest = Ext.create('IMS.SellMgt.testForm', {});
    frmTest.LoadForm();
});
4

2 に答える 2

0

次のようなものを試してください:

......
handler: function () {
    var test = this.findParentByType(Ext.form.FormPanel);
}
....
于 2013-04-28T03:02:48.033 に答える
0

handlerボタンのクリック イベント リスナーを指定する簡単な方法です。短針なのでデメリットもあります。

ではhandler、関数のコンテキストは常にボタンです。つまり、thisハンドラー関数内にはフォームではなくボタンがあります。

thisクラスにするには、スコープを指定してリスナーを使用します。

buttons: [{
    text: 'Submit',
    listeners: {
        click: function() {
            this.formPanel; // will work now
            ...
        },
        scope: this // this is the key
    }
}]

upを使用してフォームを見つけることもできます。

handler: function() {
    var form = this.up('form');
    ...
}
于 2013-04-28T03:46:04.173 に答える