Extjs4 Extjs窗口关闭事件

Extjs4 Extjs窗口关闭事件,extjs4,Extjs4,我有一个带有取消按钮和默认关闭[x]的窗口。当用户单击“取消”按钮时,应检查特定标志,并关闭窗口并更新数据库。我在利用我。关闭(这个);用于关闭“取消”按钮的窗口。当用户单击[x]时,它应该检查相同的标志并更新数据库,然后关闭窗口。为了检查该标志条件,我添加了一个侦听器 这个听众工作得很好。但是在添加侦听器之后,单击cancel按钮,close事件被调用两次。因此,数据库更新会发生两次。 有人能告诉我如何处理窗口的[x]关闭事件吗 Ext.define('MyApp.view.updateFor

我有一个带有取消按钮和默认关闭[x]的窗口。当用户单击“取消”按钮时,应检查特定标志,并关闭窗口并更新数据库。我在利用我。关闭(这个);用于关闭“取消”按钮的窗口。当用户单击[x]时,它应该检查相同的标志并更新数据库,然后关闭窗口。为了检查该标志条件,我添加了一个侦听器 这个听众工作得很好。但是在添加侦听器之后,单击cancel按钮,close事件被调用两次。因此,数据库更新会发生两次。 有人能告诉我如何处理窗口的[x]关闭事件吗

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
            }
        }
    }

});

一种解决方法是,当按下
取消
按钮时,只需调用
关闭
。即,按下
取消时,不要执行
(标志==true)
检查。这不会导致调用两次
close

我已经完成了这个精确的实现,但有一些细微的差异,可以证明它完全按照预期工作

这是我的密码:

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

这很好用。这告诉我问题在代码的其他地方。

这是不可能的,因为必须检查条件并相应地调用其他函数。我们还有别的办法处理吗?嗯,你有没有看到窗户的事件?我认为它提供了一个正确的位置来执行您的条件并返回
true
false
,这取决于您是否确实要关闭窗口。您好,我在关闭之前尝试过。即使我单击“取消”,close也会被调用两次。监听器:{beforeclose:function(){alert(“beforeclose”);if(flag==true){alert(“close window”);}}}您应该将
写入db
部分仅放在一个位置;理想情况下,如果仅关闭窗口(即,如果要在关闭之前从
返回true,请执行此操作)。你的代码有这样的结构吗?你能解决这个问题吗?