2016-11-17 8 views
0

Я столкнулся с проблемой с маркировкой штабелированных диаграмм столбцов и столбцов в последних версиях Dojo. Этикетки помещаются в центр столбца/столбца, когда он рисуется от 0, а не от конца предыдущего столбца/столбца. Это означает, что метки часто перекрываются в середине столбца/столбца или отображаются в неправильном разделе столбца/столбца.Dojo Stacked Bars/Обозначение диаграммы столбцов в неправильном положении


Пример: заимствование скрипки JS из этого StackExchange post, чтобы проиллюстрировать проблему: изменить версию Dojo между «1.10.4» и «ночным», и вы увидите метку позиции двигаться.


Я обнаружил причину этой проблемы, функция «ПолучитьЗначение» была удалена из StackedBars и StackedColumn (Dojox \ картирование \ plot2d \ StackedColumn.js) файлы между версиями 1.10.6 и 1.11. 1. Эта функция использовала предыдущее значение столбца/столбца, чтобы отрегулировать положение метки, так как ее теперь отсутствует, этого не происходит.

Я использую API JavaScript ESRI, который включает Dojo 1.11.1. Я попытался скопировать (и изменить) функцию из старой версии додзё, но, похоже, многие другие функции диаграмм изменились, и я не добился успеха в ее работе.

Я до сих пор довольно новичок в JavaScript и Dojo, но все равно добавить эту функцию обратно без изменения файлов в ESRI API?

Неудача, что есть способ ретро-подгонки старой функции к новой версии успешно?

Спасибо!


EDIT: Это содержимое мой модифицированный 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/графиков/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, которые уже могут включать функцию GetValue в классах StackedBar/StackedColumn. Требуется некоторый механизм проверки наличия базового класса с методом GetValue.

Он работает с API ESRI 3.17 и 3.18, для которого он предназначен.