Когда рендерить Legend во Flex - PullRequest
       11

Когда рендерить Legend во Flex

0 голосов
/ 11 ноября 2009

В моей диаграмме Flex есть код, который создает легенду из каждой серии данных. В настоящее время при нажатии кнопки выполняется функция drawLegend.

Я пытаюсь автоматически нарисовать легенду, но у меня возникают проблемы с определением, когда вызывать функцию drawLegend. Пользователи нажимают на кнопку «Обновить», которая извлекает данные. Я хочу, чтобы легенда создавалась после этого, чтобы пользователям не приходилось нажимать на другую кнопку.

Я поместил свою функцию drawLegend в нескольких местах (ResultHandler, afterEffectEnd (для анимации диаграммы и т. Д.), И ничего не работает.

Через некоторое время после добавления серии на график и после завершения анимации серии можно добавить легенду.

Как я могу перехватить этот момент времени и вызвать мою функцию?

Есть идеи?

Ниже приведен код, который я использовал для создания легенды. Обратите внимание, что, хотя код обрабатывает каждую серию, я заметил, что цвет Fill равен нулю, если он вызывается слишком рано.

private function drawLegend(event:Event):void {
clearLegend();

// Use a counter for the series.
var z:int = 0;

var numRows:int; 
if (chart.series.length % rowSize == 0) {
    // The number of series is exactly divisible by the rowSize.            
    numRows = Math.floor(chart.series.length / rowSize);                
} else {
    // One extra row is needed if there is a remainder.
    numRows = Math.floor(chart.series.length / rowSize) + 1;
}

for (var j:int = 0; j < numRows; j++) {
    var gr:GridRow = new GridRow();
    myGrid.addChild(gr);

    for (var k:int = 0; k < rowSize; k++) {
        // As long as the series counter is less than the number of series...

        //skip columnset group
        if (chart.series[z] is LineSeries || chart.series[z] is ColumnSeries){
            if (z < chart.series.length) {
                var gi:GridItem = new GridItem();
                gr.addChild(gi);

                var li:LegendItem = new LegendItem();

                    // Apply the current series' displayName to the LegendItem's label.
                    li.label = chart.series[z].displayName;

                    // Get the current series' fill.
                    var sc:SolidColor = new SolidColor();
                    sc.color = chart.series[z].items[0].fill.color;

                    // Apply the current series' fill to the corresponding LegendItem.
                    li.setStyle("fill", sc.color);//was just sc

                    // Apply other styles to make the LegendItems look uniform.
                    li.setStyle("textIndent", 5);
                    li.setStyle("labelPlacement", "left");
                    li.setStyle("fontSize", 9);

                    gi.setStyle("backgroundAlpha", "1");
                    gi.setStyle("backgroundColor", sc.color);
                    //gi.width = 80;

                    // Add the LegendItem to the GridItem.
                    gi.addChild(li);
                }
            }
        // Increment any time a LegendItem is added.
        z++;
    }
}                                       

}

1 Ответ

0 голосов
/ 13 ноября 2009

Ну, я не мог понять, какое событие перехватить, поэтому я использовал следующее в родительском контейнере диаграммы:

chart.addEventListener(ChartItemEvent.ITEM_ROLL_OVER,drawLegend);

Кажется, работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...