2016-09-28 51 views
0

我在mypackage的\以下重写覆盖\窗口\窗口:ExtJs5覆盖失去听众

Ext.define('myPackage.window.Window', { 
    override: 'Ext.window.Window', 

    listeners: { 
     beforeshow: function (window) { 
      console.log('before show'); 
     } 
    } 
}); 

我然后用这个代码中使用此:

Ext.define('myApp.view.login.Login', { 
    extend: 'Ext.window.Window', 
    xtype: 'login', 

    requires: [ 
     'myApp.view.login.LoginController', 
     'Ext.form.Panel' 
    ], 

    controller: 'login', 

    title: 'Login', 

    closable: false, 
    autoShow: true, 
    resizable: false, 

    listeners: { 
     show: function() { 
      console.log('in show'); 

     } 
    }, 

    items: { 
     ... snipped for brevity; a couple of textfields and a button 
     ... 
    } 
}); 

的问题是,虽然'myApp.view.login.Login'中的'show'事件工作正常,override中的'beforeshow'事件('myPackage.window.Window')永远不会触发。

如果我然后从'myApp.view.login.Login'中删除侦听器,那么'myPackage.window.Window'中的'beforeshow'事件将会触发(我可以通过console.log输出)。

我不明白的是,为什么?我可能错过了一些相当简单的事情。

任何帮助,这是非常感谢。谢谢!

回答

0

您应该在窗口初始化后添加侦听器。 我还没有测试过。但我相信它应该可以解决您的问题。

如:

Ext.define('myApp.view.login.Login', { 
    extend: 'Ext.window.Window', 
    xtype: 'login', 

    requires: [ 
     'Ext.form.Panel' 
    ], 

    title: 'Login', 
    width: 300, 
    height: 300, 
    closable: true, 
    autoShow: true, 
    resizable: false, 
    initComponent: function() { 
     var me = this; 
     Ext.apply(me, { 
      listeners: { 
       show: function() { 
        console.log('in show'); 

       } 
      }, 

      items: [ 
       { 
        xtype: 'textfield', 
        width: 300 
       } 
      ] 
     }); 

     me.callParent(arguments); 
    } 
}); 
+0

,伟大的工作 - 太感谢你了! –