1

ページ ヘッダーに、モーダル ウィンドウを開く設定リンクがあります (名前やパスワードなどのユーザー設定を変更するためのものです)。

キャンセル ボタンでこのウィンドウを閉じますが、再度開こうとすると、次の JS エラーが発生します。

el.addCls.apply(el, arguments);

このウィンドウを閉じるのに適切な方法を使用していますか、それとも問題は別の場所にありますか?

これが私のコードです:

// My window definition
Ext.define('jnotes.window.UserPreferences', {
    extend: 'Ext.window.Window',
    layout: 'fit',
    modal: true,
    renderTo: Ext.getBody(),
    title: "<s:text name='user.preferences' />",
    items: new Ext.form.Panel({
        bodyPadding: 5,
        waitMsgTarget: true,
        method: 'POST',

        fieldDefaults: {
            labelAlign: 'right',
            labelWidth: 85,
            msgTarget: 'side'
        },
        defaultType: 'textfield',
        items: [{
            ... // my fields
        }],
        buttons: [{
            text: "<s:text name='action.save'/>",
            handler: function() {
                this.up('form').fireEvent('validate');
            },
        }, {
            text: "<s:text name='action.cancel'/>",
            handler: function() {
                this.up('form').fireEvent('cancel');
            }
        }]
    })
});

var preferencesWindow = null;

// Open my window
function displayPreferences() {
    preferencesWindow = Ext.create('jnotes.window.UserPreferences');
    var form = preferencesWindow.down('form');
    form.addListener('validate', this.saveUser, this);
    form.addListener('cancel', function() {
        preferencesWindow.close();
        preferencesWindow = null;
    }, this);
    form.load({
        ... // Loading data
    });
    preferencesWindow.show();
};
4

2 に答える 2

6

問題を解決する可能性のある別の解決策は、ウィンドウ構成で closeAction を指定することです。

closeAction: 'hide'

closeAction に関する Extjs Docs の詳細:

ヘッダーを閉じるツールがクリックされたときに実行するアクション:

可能な値:

'destroy' : remove the window from the DOM and destroy it and all descendant Components. The window will not be available to be redisplayed via the show method.
'hide' : hide the window by setting visibility to hidden and applying negative offsets. The window will be available to be redisplayed via the show method.

デフォルトでは、閉じるアクションの値は destroy です。

于 2012-09-18T10:06:07.150 に答える
6

クラスを定義した方法で、フォームが作成され、クラスのすべてのインスタンスで共有されます。初めてウィンドウを破棄すると、フォームも一緒に破棄され、それで終わりです。

代わりに、次のいずれかを行う必要があります。 a) フォーム構成オブジェクトを指定します。

items: {
    xtype: 'form',
    // ....
}

b) initComponent メソッドでフォームを指定して、そのインスタンスにバインドします。

Ext.define('MyFoo', {
    initComponent: function(){
        this.items = new Ext.form.Panel(...);
        this.callParent();
    }
});
于 2012-07-08T10:40:03.057 に答える