5

キャンセル ボタンとデフォルトの [x] を含むウィンドウがあります。ユーザーがキャンセル ボタンをクリックすると、特定のフラグがチェックされ、ウィンドウが閉じられ、データベースが更新されます。私は me.close(this); を使用しています。キャンセルボタンのウィンドウを閉じます。ユーザーが [x] をクリックすると、同じフラグをチェックしてデータベースを更新し、ウィンドウを閉じます。そのフラグの状態を確認するために、リスナーを追加しました このリスナーは正常に動作します。しかし、リスナーを追加した後、キャンセル ボタンをクリックすると、close イベントが 2 回呼び出されます。したがって、データベースの更新は 2 回行われます。ウィンドウの[x]クローズイベントの処理方法を誰かにアドバイスしてもらえますか

Ext.define('MyApp.view.updateForm', {
    extend: 'Ext.window.Window',
    height: 600,
    width: 800,
    layout: {
        type: 'absolute'
    },
    title: 'Update Window',
    modal: true,
    initComponent: function() {

        Ext.applyIf(me, {
            items: [
                {
                    xtype: 'button',
                    id:'btnCancel',
                    handler    : function(){
                        if(flag == true){
                            //add to db
                            me.close(this);                                
                        }
                    }
                }]
        });    
        me.callParent(arguments);
    },

    listeners:{
        close:function(){
            if(flag == true){
                alert("close window");
                //add to db
            }
        }
    }

});
4

2 に答える 2

8

私はいくつかの小さな違いを加えてこの正確な実装を行いましたが、これが期待どおりに機能することを証明できます。

これが私のコードです:

 Ext.create('Ext.window.Window', {
      ...
      buttons:[
            {
                text:'Finish',
                handler:function () {
                    this.up('window').close();
                }
            }
       ],
       listeners:{
            close:this.someFunction,
            scope:this
        }
      ....

これは完全に機能します。これは、問題がコードの他の場所にあることを示しています。

于 2013-03-13T23:16:27.427 に答える
0

1 つの修正は、ボタンが押されcloseたときに単純に呼び出すことです。つまり、が押されたときにチェックをCancel実行しません。これにより、2 回呼び出されることはありません。(flag == true)Cancelclose

于 2013-03-13T11:06:25.367 に答える