首先看一段代码:
Ext.define('XIRJS.widget.risk.scene.defined.RiskDefinedGrid', {
extend : 'XIRJS.widget.base.BaseQueryPanel',
sqlPath: 'com.xquant.platform.component.javascript.risk.scene.TrskSceneWebMapper',
queryModel: 'MAPPER',
enablePager: true,
exportTitle: '情景定义',
initComponent: function(){
this.addEvents('gotoDefinePanel');
this.callParent(arguments);
},
然后可以看到我们在这里为我们的自定义控件RiskDefinedGrid添加了一个名为”gotoDefinePanel”的监听事件,在接下来的代码中我们在一个按钮的事件监听中为这个控件注册了”gotoDefinePanel”监听事件(也就是说如果执行了addButtonHandler方法和updButtonHandler方法时,就会触发这个事件,并且将参数也传递出去)
addButtonHandler: function(){
this.fireEvent('gotoDefinePanel', this,XIRJS.widget.risk.scene.defined.BaseInfoPanel.ADD_STATUS);
},
updButtonHandler: function(){
this.fireEvent('gotoDefinePanel', this, XIRJS.widget.risk.scene.defined.BaseInfoPanel.UPDATE_STATUS, this.grid.getSelectRecord());
},
在接下来的新定义的panel界面中,我们应用了前面定义的RiskDefinedGrid控件,然后可以看到,我们为这个控件绑定了一个为“gotoDefinePanel”类型的监听事件,也就是说在触发了“gotoDefinePanel”事件的时候,我们就要执行当前的“gotoDefinePanelHandler”方法(其实整体的思路就是:首先我们在前面的控件中为按钮注册了“gotoDefinePanel”事件,然后当我们点击按钮的时候,就会触发这个事件,接下来在panel中应用了这个控件后,因此也会触发我们为这个控件绑定的事件,就会执行“gotoDefinePanelHandler”方法体)。
Ext.define('XIRJS.widget.risk.scene.defined.RiskDefinedPanel', {
extend : 'Ext.panel.Panel',
layout: 'fit',
requires : ['XIRJS.widget.risk.scene.defined.BaseInfoPanel', 'XIRJS.widget.risk.scene.defined.CurveInfoPanel'],
title: '情景定义',
width: 1000,//这里一定要设置好宽度,否则不显示
height:500,
initComponent: function(){
this.items = [ this.buildGrid()];
this.callParent(arguments);
this.mon(this.grid, 'gotoDefinePanel', this.gotoDefinePanelHandler, this);
},
buildGrid: function(){
var grid = Ext.create('XIRJS.widget.risk.scene.defined.RiskDefinedGrid',{
superPanel : this
});
this.grid = grid;
return grid;
},
最后总结一下,整个过程就是,为一个自定义的控件使用addEvents来绑定一个自定义的事件类型,然后在接下来,我们可以为这个控件内部逻辑中注册使用这个事件类型(比如:我们点击某一个按钮,就会触发这个事件类型,并且传入需要的参数),接下来调用这个控件的时候,我们就可以为这个控件绑定这个事件类型触发时的进一步处理。
如果觉得难以理解,我们就举一个更简单的例子:
下面一段代码应该都能读懂:
var me = this;
me.mon(me.btnAdd,"chick",me.addEvent(),me);
从这里我们就可以看到其实这时候就是我们给当前的btnAdd这个按钮绑定了一个“chick”的事件类型,换句话说就是,当我们的btnAdd按钮被点击的时候,就会执行addEvent这个方法体。那么此时的chick这个事件类型其实就是被在其他地方给定义了的,也就是说在定义button这个类的时候在某个地方执行了一段fiveEvent(“chick”,me,….);的语句,那么此时就完成了这个执行过程了,当我们执行某一段代码(操作)的时候,就会执行fireEvent()方法,然后就触发了“chick”事件,那么此时就会执行addEvent方法。