ExtJS 4.1 stop grille.Panneau de clôture
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();
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;
}