itemmousedown 事件由“series”触发,series 不是组件,仅在布局后由图表初始化。因此,为了获得对系列对象的引用,我们需要等待图表的后布局事件。但不幸的是,图表没有触发 afterlayout 事件......所以,首先覆盖图表的 afterComponentLayout 方法,使其触发事件:
Ext.define('MyNewChart',{
extend: 'Ext.chart.Chart',
afterComponentLayout: function(width, height, oldWidth, oldHeight) {
this.callParent(arguments);
this.fireEvent('afterlayout', this);
}
});
现在,使用我们的新图表类来创建您的图表:
Ext.create('MyNewChart', {
id: 'myChart',
...
});
现在我们可以创建一个控制器,在 itemmousedown 事件上实际创建一个监听器:
Ext.define('Gamma.controller.ControlFile', {
extend : 'Ext.app.Controller',
initializedEvents: false,
init: function() {
this.control({
'#myChart': {
afterlayout: this.afterChartLayout
}
});
},
afterChartLayout: function(){
if(this.initializedEvents==true) return;
this.initializedEvents=true;
Ext.getCmp('myChart').series.items[0].on('itemmousedown',function(obj){
console.log(obj);
});
}
});
这是一个工作小提琴:http: //jsfiddle.net/qjfBC/