Extjs 窗口关闭事件

Posted

技术标签:

【中文标题】Extjs 窗口关闭事件【英文标题】:Extjs window close event 【发布时间】:2013-03-13 10:51:43 【问题描述】:

我有一个带有取消按钮和默认关闭 [x] 的窗口。当用户单击取消按钮时,它应该检查特定标志并关闭窗口并更新数据库。我正在使用 me.close(this);用于关闭取消按钮的窗口。当用户单击 [x] 时,它应该检查相同的标志并更新 db,然后关闭窗口。为了检查那个标志条件,我添加了一个监听器 这个监听器工作正常。但是添加监听器后,点击取消按钮,两次关闭事件被调用。所以数据库更新发生了两次。 有人可以建议我如何处理窗口的 [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
            
        
    

);

【问题讨论】:

你能解决这个问题吗? 【参考方案1】:

我已经完成了这个精确的实现,但有一些细微的差别,并且可以证明这完全符合预期。

这是我的代码:

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

这非常有效。这告诉我问题在您的代码中的其他地方。

【讨论】:

【参考方案2】:

一种解决方法是在按下Cancel 按钮时简单地调用close。 IE。按下Cancel 时不要执行(flag == true) 检查。这不会导致close 被调用两次。

【讨论】:

这是不可能的,因为必须检查条件并相应地调用其他函数。我们还有什么办法可以解决这个问题? 嗯,您是否有机会查看 Window 的 beforeclose 事件?我认为它提供了执行条件并返回 truefalse 的正确位置,具体取决于您是否真的要关闭窗口。 嗨,我之前试过了。即使这样,当我单击取消时, close 也会被调用两次。听众: beforeclose:function() alert("before close"); if(flag == true) alert("关闭窗口"); 您应该只将write to db 部分放在一个地方;理想情况下,如果仅关闭窗口(即,如果您要从 beforeclose 返回 true)。你的代码有这种结构吗?

以上是关于Extjs 窗口关闭事件的主要内容,如果未能解决你的问题,请参考以下文章

失去焦点时自动关闭 ExtJS 窗口

Ext JS:窗口子组件隐藏事件

将按键事件添加到 ExtJS DatePicker

ExtJs双击行并将记录传递到输入字段中的另一个窗口

c #关闭窗口没有触发FormClosing事件是怎么回事啊?

pyside窗口关闭触发事件