Как вы форматируете (выравниваете) метки, состоящие из нескольких частей (например, p1, p2, p3) в виде сетки? - PullRequest
0 голосов
/ 22 ноября 2011

Поставщик данных для диаграммы содержит массив объектов объекта.Объект объекта состоит из нескольких частей с указанием идентификатора установки, номера объекта и названия объекта, как показано ниже:

{
   installationID:1000,
   facilityNum:529,
   facilityName:"Building1"
}

У меня есть диаграмма, которая отображает потребление энергии на здание.На графике могут отображаться здания из нескольких разных регионов.Я хочу:

  1. Группировать все здания в одном регионе вместе.
  2. Включить метку региона только тогда, когда начинается новая группа.
  3. Выровнять меткучасти в сетке, такие что:
    • Все метки региона выровнены по левому краю друг с другом.
    • Все идентификаторы зданий выровнены по правому краю друг с другом.
    • Названия зданий выровнены по левому краюдруг с другом.

Пример желаемого результата показан на рисунке ниже.

Desired Formatting

Использование пользовательскогоФункция метки применяется к оси категорий. Я могу объединить значения в одну строку.Сортировав идентификатор области массива, я могу даже удалить (не добавить) идентификатор области, если не начинается новая группа.Пользовательская функция метки показана здесь.

private var nextCategoryIndex:int = 1;

public function facilitiesLabelFunction(categoryValue:Object, previousCategoryValue:Object, axis:CategoryAxis, categoryItem:Object):String
{
   var nextInstallationID:String = "";
   var facilitiesColl:ArrayCollection = ArrayCollection(axis.dataProvider);

   // if this is not the last facility to be processed get the next installation ID
   if (nextCategoryIndex <= facilitiesColl.length - 1) {
      nextInstallationID = facilitiesColl[nextCategoryIndex].installationID;
   }

   var label:String = categoryItem.facilityNum + " - " + categoryItem.facilityName;

   // preppend the installation id when we start listing facilities from a different installation
   if (nextInstallationID != categoryItem.installationID) {
      label = categoryItem.installationID + " " + label;
   }

   nextCategoryIndex++;
   return label;
}

Однако, это генерирует единственную строку, которая выровнена по правому краю (как и ожидалось).Я хочу добиться выравнивания трех свойств по левому, правому и левому краям, как описано выше.

Я попытался объединить значения свойств в функции метки с символом @ в качестве разделителя.Мысль была в том, что я мог бы создать собственный рендерер меток, который бы разбивал строку на этом разделителе и выполнял выравнивание по мере необходимости.Однако мне кажется, что я не могу изменить выравнивание метки в пользовательском средстве визуализации меток.

Как я могу выровнять метки, состоящие из нескольких частей, в сетке, как в моде на гибкой диаграмме?

1 Ответ

1 голос
/ 01 декабря 2011

Я не знаю каких-либо возможностей многокомпонентных меток во Flex, но вы можете создавать средства визуализации элементов, которые будут содержать и выравнивать любое количество меток (или других компонентов) так, как вы хотите.Нечто подобное должно работать (не завершено или не проверено, но должно указывать правильное направление):

<mx:BarChart>
    <mx:AxisRenderer>
        <mx:labelRenderer>
            <fx:Component>
                <s:Group width="300">
                    <s:Label left="0" text="{data.leftvalue}" />
                    <s:Label horizontalCenter="0" text="{data.centervalue}" />
                    <s:Label left="right" text="{data.rightvalue}" />
                </s:Group>
            </fx:Component>
        </mx:labelRenderer>
    </mx:AxisRenderer>
</mx:BarChart>
...