使标签正确定位在Dojo StackedBars和StackedColumns图表上的解决方案是创建一个新类,该类继承自dojox/charting/plot2d/StackedBars或dojox/charting/plot2d/stackedColomns,并包含缺少的GetValue函数。
下面是StackedBars的工作类:
define(["dojo/_base/declare", "dojox/charting/plot2d/StackedBars", "dojox/charting/plot2d/commonStacked", "dojo/_base/lang"],
function(declare, StackedBars, commonStacked, lang){
return declare("FixedStackedBars", dojox.charting.plot2d.StackedBars, {
getValue: function(value, index, seriesIndex, indexed){
var y,x;
if(indexed){
x = index;
y = commonStacked.getIndexValue(this.series, seriesIndex, x, lang.hitch( this, "isNullValue" ) );
}else{
x = value.x - 1;
y = commonStacked.getValue(this.series, seriesIndex, value.x);
y = [ y[0]?y[0].y:null, y[1]?y[1]:null ];
}
// in py we return the previous stack value as we need it to position labels on columns
return { x: x, y: y[0], py: y[1] };
}
});
});
在代码中使用这个新类代替dojox/charting/plot2d/StackedBars。
然而,这个方法并不完美,因为它不会考虑旧版本或未来版本的Dojo,这些版本可能已经在StackedBar/StackedColumn类中包含了GetValue函数。需要一些机制来检查基类是否包含GetValue方法。
它可以与ESRI JavaScript API 3.17和3.18一起工作,这正是它的目标。