2016-11-17 10 views
0

최신 버전의 Dojo에서 스택 막대 및 열 차트의 레이블링 문제가 발생했습니다. 레이블은 이전 막대/열의 끝에서가 아니라 0부터 그려 지므로 막대/열의 가운데에 배치됩니다. 즉, 레이블은 바/열의 가운데에 겹치거나 바/열의 잘못된 섹션에 나타납니다.잘못된 위치에 Dojo 스택 막대/열 차트 표시


예 :이 StackExchange post에서 JS 바이올린을 대출하는 문제를 설명하기 위해 "야간" "1.10.4"사이의 도장 버전을 변경하고 위치를 이동 라벨을 볼 수 있습니다.

나는이 문제에 대한 이유를 찾았

는 "GetValue"기능은 StackedBars에서 제거 된 StackedColumn (DojoX는 \ 차트 \ plot2d \ StackedColumn.js) 버전 1.10.6과 1.11 사이에 파일을 저장합니다. 1. 이 함수는 이전 막대/열 값을 사용하여 레이블 위치를 조정합니다.

Dojo 1.11.1이 포함 된 ESRI JavaScript API를 사용하고 있습니다. 이전 버전의 도장에서 함수 복사 및 수정을 시도했지만 다른 많은 차트 함수가 변경된 것으로 보이며 제대로 작동하지 못했습니다.

저는 아직 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

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에서 작동합니다.