Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sencha touch 2 如何使用Sencha Touch2在控制器中侦听控制器触发的事件_Sencha Touch 2 - Fatal编程技术网

Sencha touch 2 如何使用Sencha Touch2在控制器中侦听控制器触发的事件

Sencha touch 2 如何使用Sencha Touch2在控制器中侦听控制器触发的事件,sencha-touch-2,Sencha Touch 2,我有多个控制器,假设它们是主控制器和子控制器, Controller Sub触发一个事件,我想在Controller Main上捕获它, 我该怎么办?谢谢 编辑:我将代码粘贴到此处 在子控制器中: config: { control: { 'pinlist': { disclose: 'showPinDetails' } } } , sh

我有多个控制器,假设它们是主控制器和子控制器,
Controller Sub触发一个事件,我想在Controller Main上捕获它,
我该怎么办?谢谢

编辑:我将代码粘贴到此处

在子控制器中:

config: {

    control:    {
        'pinlist': {
            disclose: 'showPinDetails'                
        }                    
    }

} 


, showPinDetails: function(list, record) {
    console.log('showPinDetails');

    this.fireEvent('showPinDetails',list, record);

}
主控制器中:

requires: [
            'MyApp.controller.Sub',
            ],  


config: {

    listeners: {
        'showPinDetails': 'showPinDetails',
    }
} , 
showPinDetails: function(list, record){
    console.log('showPinDetails');       
},

因此,我刚刚从Sub获得了日志'showPinDetails',而不是Sub controller中的两个

,在其中一个处理函数中,您可以编写以下代码

....
btnClick : function() {
   myPanel.fireEvent('mycustomevent', this);
}
....
在主控制器中,您可以在某些组件上侦听该事件,如下所示

......
listeners : {
    'mycustomevent' : function() {
             // ....
             // ....
     }
}
......

在Sub controller中的一个处理程序函数中,您可以编写以下代码

....
btnClick : function() {
   myPanel.fireEvent('mycustomevent', this);
}
....
在主控制器中,您可以在某些组件上侦听该事件,如下所示

......
listeners : {
    'mycustomevent' : function() {
             // ....
             // ....
     }
}
......

在子控制器中,假设您通过以下方式触发事件:

yourComponent.firevent('my_event',this);
然后,您必须在主控制器中以编程方式定义侦听器和处理程序。最佳实践是:

Ext.define('app.controller.Main'{
扩展:“Ext.app.Controller”,
配置:{
参考文献:{

yourComponent:'在此处输入选择器,例如#id' }, 控制:{ 您的组件:{ “我的事件”:“我的事件处理程序” } } }, 我的事件处理程序:函数(){ //在这里你想干什么就干什么 }) });
在子控制器中,假设您通过以下方式触发事件:

yourComponent.firevent('my_event',this);
然后,您必须在主控制器中以编程方式定义侦听器和处理程序。最佳实践是:

Ext.define('app.controller.Main'{
扩展:“Ext.app.Controller”,
配置:{
参考文献:{

yourComponent:'在此处输入选择器,例如#id' }, 控制:{ 您的组件:{ “我的事件”:“我的事件处理程序” } } }, 我的事件处理程序:函数(){ //在这里你想干什么就干什么 }) });
首先,您需要对其他控制器的引用。这可以通过以下方式实现:

var other=YourAppName.app.getController('OtherController')

然后在“侦听”控制器(或适合您的任何其他位置)的
init
/
启动
方法中,您可以添加事件侦听器:

other.on({
    myCustomEventName: function () {
        console.log('Hello World');
    }
});

如果您是手动创建子控制器,而不是将其添加到
app.js
中的控制器数组中,则需要在创建子控制器后添加侦听器。

首先,您需要对其他控制器的引用。这可以通过以下方式实现:

var other=YourAppName.app.getController('OtherController')

然后在“侦听”控制器(或适合您的任何其他位置)的
init
/
启动
方法中,您可以添加事件侦听器:

other.on({
    myCustomEventName: function () {
        console.log('Hello World');
    }
});

如果您是手动创建子控制器,而不是将其添加到
app.js
中的控制器数组中,则需要在创建子控制器后添加侦听器。

“yourComponent:'在此处输入选择器,例如#id'”。但是我的组件是一个控制器,它没有id!如果您只想直接调用该控制器的特定函数,请执行以下操作:
Ext.getApplication().getController('your\u controller\u name')。my\u event\u handler()
谢谢,这正是我想要的need@ThiemNguyen为什么在调用fireEvent时传递“this”?我想它只会提供给你的处理程序,我看不到你在使用它。或者它是否更改了在
中触发处理程序的范围此
引用函数的范围。因此,如果要运行不在同一控制器中的某些方法,必须传递组件的引用(稍后在某处处理…),这就是使用
的方式“yourComponent:”在此处输入选择器,例如#id“。但是我的组件是一个控制器,它没有id!如果您只想直接调用该控制器的特定函数,请执行以下操作:
Ext.getApplication().getController('your\u controller\u name')。my\u event\u handler()
谢谢,这正是我想要的need@ThiemNguyen为什么在调用fireEvent时传递“this”?我想它只会提供给你的处理程序,我看不到你在使用它。或者它是否更改了在
中触发处理程序的范围此
引用函数的范围。因此,如果您想运行不在同一控制器中的某些方法,您必须传递组件的引用(稍后将在某处处理…),这就是如何使用
this
myPanel
只是一个容器(例如),我在其上触发自定义事件。但在这种情况下,它是一个控制器,不是容器的子类。我在上面粘贴了我的代码
myPanel
只是一个容器(例如),我在其上触发自定义事件。但在这种情况下,它是一个控制器,而不是容器的子类。我已将代码粘贴到上面