2

私はそれを拡張Ext.grid.Panelして表示し、ユーザーが[X]をクリックした後に本当にパネルを閉じたいかどうかをユーザーに尋ねられるようにしたいと思います。で試してみました

listeners: {
            beforedestroy: function() {
                               //console.log('In');
                return false;
            }
        },

しかし、明らかにそれはそれほど単純ではありません。パネルの閉鎖を防ぐ方法について何かアイデアはありますか?

ありがとう

レロン

PS

これは私が煎茶フォーラムから得たものです、まだそれをテストしていません:

Ext.create( 'Ext.window.Window', {
    title: 'test',
    width: 200,
    height: 200,
    listeners: {
        beforeclose: function( window ) {
            Ext.Msg.confirm( 'Hey', 'Are you sure you want to close?', function( answer ) {
                if( answer == "yes" ) {
                    window.destroy();
                }
            } );
            return false;
        }
    }
} ).show(); 
4

3 に答える 3

3

beforecloseイベントが機能するはずです。いいえ?

アップデート:

ユーザーとのやり取り (つまり、確認の質問やデータの保存など) が必要な場合は、少し注意が必要です...

まず、ビューのコンストラクターで次のようにします。

this.on('beforeclose', function() { 
   return this.myCloseHandler(function() { this.close(); }, this);
});
this.alreadyAsked = false;

ハンドラを作成するより:

myCloseHandler: function(callback, scope) {
    if (this.alreadyAsked === false) {
        this.alreadyAsked = true;
        Ext.MessageBox.show({
            msg: 'Are you sure?',
            fn: function(btn) {
               if (btn == 'yes')
                  Ext.callback(callback, scope);
               else 
                  this.alreadyAsked = false;   
            }
        });
        return false;

    }
    return true;   
}

アイデアは - すぐに false を返しますが、確認なしで同じロジックを通過するためのフラグと条件があります。

于 2012-05-22T17:55:09.913 に答える
2

私が使用する手法は、ウィンドウのデフォルトの破棄ではなくウィンドウの非表示を実行し、beforehide イベント リスナーを追加することです。これにより、破棄したくないウィンドウ内のすべてのコンポーネントがとにかく破棄されるのを防ぎます。hide イベントは、これに対して非常に無害なイベントです。次に、Ext.msg が来ます。おそらく特定の条件でのみです。そして、中断メッセージに対するあなたの応答は仕事を終えました。それ以外の場合は false が返されるため、害はありません。

var win = Ext.create('Ext.window.Window', {
       .... your window specs ...
       closeAction : 'hide',
       buttons : [{
            text    : 'Close',
            scope   : me,
            handler : function() {
                win.hide(); // not destroy !!! that comes later !!!
            }
        }],
        listeners : {
            scope  : me,
            'beforehide' : function(window) {
                if (some_condition == true) {
                    Ext.Msg.confirm( 'Confirm close of window', 'You really wanna close this window ?', function( answer ) {
                        if( answer == "yes" ) {
                            window.destroy();
                        }
                    });
                    return false;
                }

            },
            'destroy' : function(window) {
                  // do something after the window destruction //
                  alert('Another window smashed');
            }
        }
        ... rest of your window specs
  });
于 2012-12-06T19:42:34.663 に答える
1

多分重い構造には必要はありません。以下は私にぴったりです:

beforeclose: function(window) {
    Ext.Msg.confirm("Hey", "Are you sure you want to close?", function(answer) {
        if (answer == "yes") {
            window.events.beforeclose.clearListeners();
            window.close();
        }
    });
    return false;
}
于 2012-11-04T20:30:26.173 に答える