2013-03-13 200 views
4

我有一個窗口與取消按鈕和默認關閉[X]。當用戶點擊取消按鈕時,它應該檢查特定的標誌並關閉窗口並更新數據庫。我正在使用me.close(this);關閉取消按鈕的窗口。當用戶點擊[x]時,它應該檢查相同的標誌並更新數據庫,然後關閉窗口。爲了檢查該標誌狀態,我添加了一個監聽器 這個監聽器工作正常。但添加偵聽器後,單擊取消按鈕,關閉事件被調用兩次。所以db更新發生兩次。 可能有人建議我如何處理[x]關閉事件窗口Extjs窗口關閉事件

Ext.define('MyApp.view.updateForm', { 
    extend: 'Ext.window.Window', 
    height: 600, 
    width: 800, 
    layout: { 
     type: 'absolute' 
    }, 
    title: 'Update Window', 
    modal: true, 
    initComponent: function() { 

     Ext.applyIf(me, { 
      items: [ 
       { 
        xtype: 'button', 
        id:'btnCancel', 
        handler : function(){ 
         if(flag == true){ 
          //add to db 
          me.close(this);         
         } 
        } 
       }] 
     });  
     me.callParent(arguments); 
    }, 

    listeners:{ 
     close:function(){ 
      if(flag == true){ 
       alert("close window"); 
       //add to db 
      } 
     } 
    } 

}); 
+0

你能解決這個問題嗎? – Freakyuser 2014-11-26 13:55:57

回答

0

一個解決將是隻需調用close按下Cancel按鈕時。即當按下Cancel時,不要執行(flag == true)檢查。這不會導致close被調用兩次。

+0

這是不可能的,因爲檢查條件並相應地調用其他函數是必需的。任何其他方式,我們可以處理這個? – user1049057 2013-03-13 11:40:48

+0

嗯,你有沒有機會看看窗口的['beforeclose'](http://docs.sencha.com/ext-js/4-1/#!/api/Ext.window.Window-event-beforeclose)事件?我認爲它提供了一個正確的地方去執行你的條件,並根據你是否真的要關閉窗口來返回「true」或「false」。 – 2013-03-13 11:52:22

+0

嗨,我試過之前關閉。即使那時我點擊取消,關閉被調用兩次。聽衆:{ \t \t beforeclose:function(){ \t \t alert(「close close」); \t \t \t如果(標誌==真){ \t \t \t \t警報( 「關閉窗口」); \t \t \t} \t \t} \t} – user1049057 2013-03-13 12:34:48

6

我已經完成了一些細微差異的確切實現,可以證明,這完全按預期工作。

這裏是我的代碼:

Ext.create('Ext.window.Window', { 
     ... 
     buttons:[ 
      { 
       text:'Finish', 
       handler:function() { 
        this.up('window').close(); 
       } 
      } 
     ], 
     listeners:{ 
      close:this.someFunction, 
      scope:this 
     } 
     .... 

這完美的作品。這告訴我這些問題是在你的代碼中的其他地方。