Extjs 4.1 Stop Grid.Panel 폐쇄
문제
나는 Ext.grid.Panel
를 확장시키고, 그가 클릭 한 후에 패널을 정말로 닫고 싶다면 사용자에게 물어볼 수 있기를 원한다.나는
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();
. 해결책
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를 반환하지만 확인없이 동일한 논리를 통과하는 플래그와 조건이 있습니다.
다른 팁
사용하는 기술은 단순히 창의 기본 파괴가 아닌 창 숨기기를 수행하고 잠시 이벤트 수신기를 추가하는 것입니다.이렇게하면 윈도우의 모든 구성 요소가 파괴되지 않도록 할 수 있습니다. 어쨌든 파괴됩니다.숨기기 이벤트는 이것에 대한 꽤 무고한 이벤트입니다.그런 다음 Ext.msg가 오는 경우에도 특정 조건에서만 발생합니다.그리고 나누기 메시지에 대한 응답은 작업을 완료했습니다.그렇지 않으면 false가 반환되기 때문에 아무런 해가되지 않습니다.
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
});
. 무거운 구조물에는 필요가 없습니다.다음은 나에게 완벽한 작품 :
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;
}
. 제휴하지 않습니다 StackOverflow