【问题标题】:Extjs window close eventExtjs 窗口关闭事件
【发布时间】: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
            }
        }
    }

});

【问题讨论】:

  • 你能解决这个问题吗?

标签: extjs4


【解决方案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)。你的代码有这种结构吗?
    猜你喜欢
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多