ExtJS 4.1停止grid.Panel关闭

时间:2012-05-22 15:39:58

标签: extjs extjs4.1

我认为扩展Ext.grid.Panel我希望能够在用户点击[X]后询问用户是否真的要关闭面板。我试过

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

但显然不是那么简单。关于如何防止关闭面板的任何想法?

由于

Leron

P.S。

这是我从sencha论坛获得的,尚未测试它:

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(); 

3 个答案:

答案 0 :(得分: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,但有一些标志和条件在没有确认的情况下经历相同的逻辑。

答案 1 :(得分:2)

我使用的技术只是做一个窗口隐藏而不是默认的窗口破坏并添加一个前隐藏事件监听器。这样可以防止窗口中要防止破坏的所有组件被破坏。隐藏事件是一个非常无辜的事件。然后Ext.msg来了,甚至可能只在某种条件下。你对休息信息的回应完成了这项工作。否则不会造成伤害,因为返回了错误。

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
  });

答案 2 :(得分: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;
}