2

在我看来,我有这个定义:

看法:

Ext.define("MyApp.view.Welcome", {
    extend: 'Ext.Panel',
    alias: 'widget.welcomeview',


    config: {
        ///...items... removed lines for brevity.. 
        {
           xtype: 'button',
           id : 'btnSignInNow',
           text: 'Sign In Now',            
           listeners: {
               tap: function() {
               this.fireEvent("onSignInNowTap", this);
                console.log("onSignInNowTap fired"); /// <-- I see this in console.log
          }
       }
    }

我可以在日志中看到这一点。但在我的控制器中,它没有收到事件。任何人都可以对此有所了解吗?

控制器:

 config: {
        refs: {
            welcomeView: 'welcomeview'
        },

        control: {
            welcomeView: {
                onSignInNowTap: function () {
                    alert('bla!');  <!-- I Don't see this in console.log
                }
            }
        }
    }

我很感激我可能错过了一些东西,但是有什么方法可以调试来找出这个事件是如何/在哪里丢失或被忽略的?

4

3 回答 3

2

尝试

this.parent.fireEvent("onSignInNowTap", this);

代替

this.fireEvent("onSignInNowTap", this);

这样父视图将触发事件而不是按钮。有时,如果按钮嵌套在内部深处,您可能必须做这样的事情

this.parent.parent.parent....fireEvent("onSignInNowTap", this);
于 2012-12-21T06:58:50.057 回答
0

感谢 ThinkFloyd。你的解决方案奏效了。我必须使用 this.parent.fireEvent(...) 然后控制器才能捕捉到它...

于 2013-11-22T22:54:52.293 回答
0

在 initialize 中编写视图的侦听器,您将在 initialize 中获得对此的 引用

 Ext.define("MyApp.view.Welcome", {
    extend: 'Ext.Panel',
    alias: 'widget.welcomeview',



 initialize:function(){
        this.callParent();
       listeners: {
          tap: function() {
             this.fireEvent("onSignInNowTap", this);
             console.log("onSignInNowTap fired");
          }
       }
    }
于 2012-12-20T03:55:00.880 回答