문제

나는 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;
}
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top