2016-11-17 9 views
0

Dojoの最新バージョンでは、積み重なった棒グラフと縦棒グラフのラベルに問題があります。 ラベルは、前のバー/列の末尾からではなく、0から引き出されているので、バー/列の中央に配置されています。これは、ラベルがバー/コラムの中央に重複したり、バー/コラムの間違ったセクションに重なることが多いことを意味します。Dojo Stacked Bars/Columns不正な位置のラベルの貼り付け


例:問題を説明するために、このStackExchange postからJSのフィドルを借りる:「1.10.4」と「毎晩」とラベルの位置が移動表示されます間の道場のバージョンを変更します。私は、問題の原因を設置しました


、 "GetValueメソッド" 機能は、バージョン1.10.6と1.11の間StackedBarsとStackedColumn(Dojox \チャート\ plot2dの\ StackedColumn.js)ファイルから削除されました。 1。この関数は、ラベルの位置を調整するために以前のバー/カラムの値を使用しました。

私はDojo 1.11.1を含むESRI JavaScript APIを使用しています。以前のバージョンのdojoから関数をコピー(および変更)しようとしましたが、他の多くのチャート機能が変更されているように見えます。

まだJavaScriptとDojoの新機能はありますが、ESRI APIのファイルを変更せずにこの機能を追加する方法はありますか?

古いバージョンの機能を新しいバージョンにレトロフィットする方法はありますか?

ありがとうございます!


EDIT:これは私の修正StackedBars.jsの内容は次のとおりです。私の最初の問題は、 "e.hitch(この、 "isNullValue")" とあった

//>>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]}; 
    } 
})}); 

、私はタイプミスをしていました。

負の値(エラーなし、間違った場所のラベルのみ)のグラフではこの問題は解決していません。Dojoソースファイルを変更せずにこの関数を適用する方法はありますか?

+0

あなたは何を書いていますか?どんな例外がありますか? –

+0

申し訳ございませんが、変更されたStackedBars.js(StackedColumnsは同じ機能を使用しています)で質問を更新しました。私の元のエラーは、コピー/貼り付けに起因する誤植でした。 – AEgman

答えて

0

Dojo StackedBarsおよびStackedColumnsチャートにラベルを正しく配置する方法は、dojox/charting/plot2d/StackedBarsまたはdojox/charting/plot2d/StackedColumnsから継承し、欠落しているGetValue関数を含む新しいクラスを作成することです。あなたのコード内dojox /チャート/ plot2dの/ 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] }; 
    } 
}); 
}); 

使用この新しいクラス:ここ

はStackedBarsのための労働者階級です。

しかし、このメソッドは、StackedBar/StackedColumnクラスにGetValue関数がすでに含まれている古いバージョンまたは将来のバージョンのDojoを考慮しないため、完全ではありません。基本クラスにGetValueメソッドが含まれているかどうかを確認するメカニズムが必要です。

これはESRI JavaScript API 3.17および3.18で動作します。

関連する問題