这是我基于科伦坡的解决方案。
此版本允许您在声明轴时设置处理程序。此外,它允许您检索标签索引,并且仅将覆盖应用于Category
轴,因为无论如何我们对单击其他类型的轴不感兴趣。
轴声明:
...
axes: [{
type: 'Numeric',
position: 'bottom',
fields: ['field1', 'field2', 'field3', 'field4'],
title: 'Percentages',
grid: true
}, {
type: 'Category',
position: 'left',
fields: ['machineName'],
title: 'Machine Names',
handler: function(axis, i, label){
console.log('Label text: %o',label.text);
console.log('Label index: %o',i);
console.log('Axis: %o',axis);
}
}],
...
覆盖:
Ext.override(Ext.chart.axis.Category,{
getOrCreateLabel: function(i, text) {
var me = this,
labelGroup = me.labelGroup,
textLabel = labelGroup.getAt(i),
surface = me.chart.surface;
if (textLabel) {
if (text != textLabel.attr.text) {
textLabel.setAttributes(Ext.apply({
text: text
}, me.label), true);
textLabel._bbox = textLabel.getBBox();
}
}
else {
textLabel = surface.add(Ext.apply({
group: labelGroup,
type: 'text',
x: 0,
y: 0,
text: text
}, me.label));
surface.renderItem(textLabel);
textLabel._bbox = textLabel.getBBox();
// add event handler
if (me.label.handler && typeof(me.label.handler) == 'function') {
textLabel.on('click',Ext.pass(me.label.handler,[me, i]));
}
}
if (me.label.rotation) {
textLabel.setAttributes({
rotation: {
degrees: 0
}
}, true);
textLabel._ubbox = textLabel.getBBox();
textLabel.setAttributes(me.label, true);
} else {
textLabel._ubbox = textLabel._bbox;
}
return textLabel;
}
});
请注意,这是在ExtJS 4.0.7上完成的