Pregunta

Tengo que ver que extiende Ext.grid.Panel y quiero poder preguntarle al usuario si realmente quiere cerrar el panel después de que haga clic en [x].Lo intenté con

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

Pero, obviamente, no es tan simple.¿Alguna idea sobre cómo prevenir el cierre del panel?

gracias

leron

p.s.

Esto es lo que recibo de los foros de Sencha, todavía no lo he probado:

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

¿Fue útil?

Solución

El evento beforeclose debería funcionar.No?

Actualización:

Si desea tener alguna interacción del usuario (I.E. Pregunta de confirmación o datos de ahorro o algo así), será un poco complicado ...

Primero, en el constructor de la vista Haz algo así:

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

que crear controlador:

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

Idea es: usted devuelve falso de inmediato, pero tiene alguna bandera y condición para pasar por la misma lógica sin confirmación.

Otros consejos

La técnica que utilizo es simplemente hacer una escondite de la ventana en lugar de la destrucción predeterminada de la ventana y agregar un escuchador de eventos antes de la noche.Esto evita que todos los componentes en su ventana que desee evitar destruir, se destruyen de todos modos.El evento Ocultar es un evento bastante inocente con esto.Luego viene el ext. msg, tal vez incluso solo en una determinada condición.Y su respuesta en el mensaje de descanso terminó el trabajo.De lo contrario, no se hace daño, porque se devuelve Falso.

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

Tal vez no hay necesidad en las construcciones pesadas.Los siguientes trabajos perfectos para mí:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top