2016-11-17 54 views
0

我遇到一个问题,在道场的最新版本堆积条形图和柱形图的标签标注图表。 由于标签从0开始绘制,而不是从前一个栏/栏的末端绘制,因此将标签放置在栏/栏的中央。这意味着标签经常在栏/栏中间重叠,或出现在栏/栏的错误栏目中。道场堆积条形图/列在不正确的位置


示例:从这个StackExchange post借用的JS小提琴说明问题:改变“1.10.4”和“夜间”的道场的版本,你会看到的标签位置移动。


我均设为问题的原因, “的GetValue” 功能已经从StackedBars删除,StackedColumn(DojoX中\制图\ plot2d \ StackedColumn.js)1.10.6和1.11版本之间的文件。 1。这个函数使用前面的bar/column值来调整标签的位置,因为它现在不存在这种情况。

我使用ESRIs的JavaScript API,其中包括道场1.11.1。我试图从旧版本的dojo中复制(和修改)该函数,但是似乎许多其他的图表函数已经发生了变化,并且我没有成功实现它。

我还是相当新的JavaScript和Dojo,但反正是有回在添加此功能,而不ESRI API中修改文件?

做不到这一点,有没有办法在成功的新版本翻新改造旧的功能?

谢谢!


编辑:这是我修改StackedBars.js的内容:

//>>built 
define("dojox/charting/plot2d/StackedBars",["dojo/_base/declare","dojo/_base/lang","./Bars","./commonStacked"],function(c,e,f,d){ 
    return c("dojox.charting.plot2d.StackedBars",f,{ 
    getSeriesStats:function(){ 
     var a=d.collectStats(this.series,e.hitch(this,"isNullValue")),b; 
     a.hmin-=0.5; 
     a.hmax+=0.5; 
     b=a.hmin; 
     a.hmin=a.vmin; 
     a.vmin=b; 
     b=a.hmax; 
     a.hmax=a.vmax; 
     a.vmax=b; 
     return a 
    }, 
    rearrangeValues:function(a,b,c){ 
     return d.rearrangeValues.call(this,a,b,c) 
    }, 
    // COPIED THIS FUNCTION FROM 1.10.6 
    getValue:function(_5,_6,_7,_8){ 
     var y,x; 
     if(_8){ 
      x=_6; 
      y=d.getIndexValue(this.series,_7,x,e.hitch(this, "isNullValue")); 
     } 
     else{ 
      x=_5.x-1; 
      y=d.getValue(this.series,_7,_5.x); 
      y=[y[0]?y[0].y:null,y[1]?y[1]:null]; 
     } 
     return {x:x,y:y[0],py:y[1]}; 
    } 
})}); 

我最初的问题是与 “e.hitch(这一点, ”isNullValue“)”,我做了一个错字。

我仍然有这样的问题不工作的负值图表(没有错误,只是标签在错误的地方),以及如何在不修改Dojo的源文件应用此功能?

+0

你写了什么?你有什么异常? –

+0

对不起,更新后的问题与我修改后的StackedBars.js(StackedColumns使用相同的功能)。我原来的错误是由复制/粘贴导致的错字。 – AEgman

回答

0

该溶液至得到正确地定位在道场StackedBars和StackedColumns图表标签是创建从DojoX中/图表/ plot2d/StackedBars或DojoX中/图表/ plot2d/StackedColumns继承并且包括丢失的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中/图表/ plot2d/StackedBars的。

但是,这种方法并不完美,因为它不会考虑旧版或未来版本的Dojo,它可能已经在StackedBar/StackedColumn类中包含了GetValue函数。一些检查基类是否包含GetValue方法的机制是必需的。

它不与ESRI的JavaScript API 3.17和3.18,对于其预定工作。