Question

J'ai la vue qui s'étend Ext.grid.Panel et je veux être en mesure de demander à l'utilisateur si il veut vraiment pour fermer le panneau après il clique sur [X].J'ai essayé avec

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

mais, évidemment, il n'est pas simple.Toutes les idées sur la façon de prévenir de la fermeture du panneau?

Merci

Leron

P. S.

C'est ce que je reçois de sencha forums, n'est-ce pas tester encore:

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(); 
Était-ce utile?

La solution

beforeclose l'événement devrait fonctionner.Non?

Mise à jour:

Si vous voulez avoir une certaine interaction avec l'utilisateur (c'est à direquestion sur la confirmation ou de l'enregistrement des données ou quelque chose comme ça), il va être un peu délicat...

Tout d'abord, dans le constructeur de la vue de faire quelque chose comme ceci:

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

Que gestionnaire de créer:

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

L'idée est d' - vous return false immédiatement mais certains ont du pavillon et de l'état de passer par la même logique, sans confirmation.

Autres conseils

La technique que j'utilise est de faire simplement une fenêtre masquer plutôt que la valeur par défaut de détruire de la fenêtre et ajouter un beforehide écouteur d'événement.Cela empêche que tous les composants de votre fenêtre que vous souhaitez empêcher de détruire, sont détruits de toute façon.L'événement masquer est tout à fait innocent événement de cette avec.Puis l'Ext.msg vient, peut-être même seulement sur une certaine condition.Et votre réponse sur la rupture message a fini le travail.Sinon pas de mal à cela, parce que, false est retourné.

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

Peut-être il n'est pas nécessaire dans les lourdes constructions.Les ouvrages suivants, parfait pour moi:

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top