2016-11-17 55 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,對於其預定工作。