2013-03-13 176 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 
     } 
     .... 

这完美的作品。这告诉我这些问题是在你的代码中的其他地方。