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
只是一个容器(例如),我在其上触发自定义事件。但在这种情况下,它是一个控制器,而不是容器的子类。我已将代码粘贴到上面