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
事件?我认为它提供了执行条件并返回 true
或 false
的正确位置,具体取决于您是否真的要关闭窗口。
嗨,我之前试过了。即使这样,当我单击取消时, close 也会被调用两次。听众: beforeclose:function() alert("before close"); if(flag == true) alert("关闭窗口");
您应该只将write to db
部分放在一个地方;理想情况下,如果仅关闭窗口(即,如果您要从 beforeclose
返回 true)。你的代码有这种结构吗?以上是关于Extjs 窗口关闭事件的主要内容,如果未能解决你的问题,请参考以下文章