Отображение изображений / значков помимо оси Y в диаграммах Flex Bar - PullRequest
2 голосов
/ 28 июля 2011

Я пытаюсь разместить изображение помимо метки по оси Y. Итак, я создал специальный рендерер меток (содержащий HBox и). Источник изображения должен быть установлен на основе свойства, представленного в поставщике данных. Проблема в том, что я не могу получить доступ к BarSeriesItem в методе fnSetSource (). Любая помощь или указатели с благодарностью. Вот весь код.

 <mx:Application  xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        width="1280" height="750">  
  <mx:Script><![CDATA[
    import mx.collections.ArrayCollection;
    import mx.charts.series.items.PlotSeriesItem;
    import mx.controls.Label;
    import mx.controls.Image;
    import mx.containers.HBox;
    import mx.charts.series.items.BarSeriesItem;
    import mx.charts.series.ColumnSeries;
    import mx.charts.series.items.ColumnSeriesItem;
    import mx.charts.chartClasses.Series;
    import mx.charts.ChartItem;
    [Bindable]
public var employeedetails:ArrayCollection = new ArrayCollection([              
{rank:"10",emplName:"Peter",prevRank:"7",imgSource:"images/increase.png"},
{rank:"9",emplName:"Mark",prevRank:"3",imgSource:"images/decrease.png"},
{rank:"8",emplName:"Eric",prevRank:"8",imgSource:"images/decrease.png"}


]);
    ]]>
    </mx:Script>    


    <mx:BarChart id="bar" height="100%"  
            paddingLeft="15" paddingRight="5" 
            showDataTips="true"  width="847" 
            dataTipMode="multiple" >
            <mx:verticalAxis>
                <mx:CategoryAxis id="v1" categoryField="emplName" dataProvider="{employeedetails}"/>
            </mx:verticalAxis>

            <mx:verticalAxisRenderers>
                <mx:AxisRenderer placement="left" axis="{v1}">
                    <mx:labelRenderer>
                        <mx:Component>
                            <mx:HBox width="100%" height="100%" minWidth="120" minHeight="20">
                                <mx:Image id="axisImage" height="16" width="16" source="fnSetSource()">
                                    <mx:Script><![CDATA[
                                        import mx.charts.chartClasses.Series;
                                        import mx.charts.ChartItem;
                                        import mx.charts.series.items.BarSeriesItem;                                        
                                        [Bindable]
                                        public function fnSetSource(element : ChartItem, series : Series) : String
                                        {
                                        var data : BarSeriesItem = BarSeriesItem(element);
                                        var imgSrc : String = "";
                                        if (data.item.isIncrease)
                                        {
                                        imgSrc = "images/increase.png";
                                        } else if (data.item.isDecrease)
                                        {
                                        imgSrc = "images/decrease.png";
                                        }
                                        else
                                        {
                                        imgSrc = "";
                                        }
                                        return imgSrc;
                                        }
                                    ]]></mx:Script>
                                </mx:Image>
                                <mx:Label id="axisLabel" fontSize="12" width="100%" height="100%">
                                    <mx:Script><![CDATA[
                                        [Bindable]
                                        override public function set data(value : Object) : void
                                            {
                                            if (value == null)
                                            {
                                                return;
                                            }
                                            var length : int = value.text.toString().length;
                                            if (length > 15)
                                            {
                                                axisLabel.text = value.text.toString().substr(0, 15) + "...";
                                                axisLabel.toolTip = value.text;
                                            }
                                            else
                                            {
                                                axisLabel.text = value.text;
                                            }
                                        }
                                    ]]>
                                    </mx:Script>
                                </mx:Label>
                            </mx:HBox>
                        </mx:Component>
                    </mx:labelRenderer>
                </mx:AxisRenderer>
            </mx:verticalAxisRenderers>
            <mx:series>
                <mx:BarSeries id="bs2"
                yField="emplName" 
                xField="rank" 
                displayName="Rank"    
                dataProvider="{employeedetails}"                                 
                />          
        </mx:series>
    </mx:BarChart>
</mx:Application>

Ответы [ 2 ]

0 голосов
/ 19 августа 2011

похоже, что вы не передаете никаких параметров, которые нужны fnSetSource (), поэтому он не будет работать, пока вы не передадите эти два параметра .. используйте свою функцию таким образом fnSetSource (значение: Объект, PreviousValue: Объект, ось: IAxis): Строка

0 голосов
/ 03 августа 2011

Я быстро взглянул на код.Функция fnSetSource () не будет вызываться до тех пор, пока она не будет помещена в фигурные скобки: source = "{fnSetSource ()}"

Это приведет к вызову функции, но вы получите ошибки, поскольку fnSetSource () вызов не имеет 2 параметров, которые требуются функции fnSetSource.Сделайте первое изменение, которое я упомянул, и вы сможете понять это оттуда.

Не могли бы вы сделать средство визуализации элементов, которое является отдельным компонентом mxml?

...