Можно ли указать отдельные шрифты в Flex DropDownList? - PullRequest
1 голос
/ 08 февраля 2011

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

Я пока не смог найти в Интернете что-нибудь об этом и пытался это выяснить.В настоящее время я использую ArrayCollection в качестве dataProvider, но я думаю, что это может быть моей проблемой, и я должен пытаться настроить метки в flex, а не AS3.

Кто-нибудь знает, возможно ли это?И если так, у них есть какие-нибудь ссылки, которые могли бы помочь указать мне правильное направление?

Спасибо.

РЕДАКТИРОВАТЬ: Код добавлен для itemRenderer, это сработало, мне просто нужно указать каждый элемент, который я хочу выделить жирным шрифтом, хотя есть лучший способсделать это в гибком коде, в отличие от проверки на соответствие строки в рендерере?

</p> <pre><code>public class ComboCheckItemRenderer extends ItemRenderer{ public var item:CheckBox; public function ComboCheckItemRenderer(){ super(); item = new CheckBox(); item.x = 5; addElement(item); item.addEventListener(MouseEvent.CLICK, onClick); } private var _data:Object; [Bindable]override public function set data (value:Object):void { if (value!=null) { _data = value; item.label = value.label; if(item.label == "item1"){ item.setStyle("color","0x00ff00"); item.setStyle("fontWeight","bold"); } item.selected = value.selected; } }

Редактировать 2: Что я в конечном итоге пытаюсь сделатьэто создать выпадающий список флажков с данными, которые я получаю из blazeDS, у которого в основном есть группа названий групп и соответствующих им подэлементов.Я пытаюсь, чтобы раскрывающийся список делал группы жирным шрифтом и слева, а их подэлементы - обычным шрифтом и смещением вправо.Мне также нужно знать, когда на них нажимают, был ли это заголовок группы или подэлемент, чтобы я мог добавить их к объекту, который я буду отправлять обратно в мой сервис для выполнения запроса sql.то есть.

[ ]**GROUP**  
   [ ] element
   [ ] element
[ ]**GROUP**  
   [ ] element

1 Ответ

0 голосов
/ 08 февраля 2011

Как выглядят ваши данные?Почему вы не используете MXML для этого?Почему вы переопределяете set data(), а не перехватываете событие dataChange?Вы пишете гораздо больше кода, чем вам нужно.

Давайте посмотрим на это более «гибко».Обратите внимание, как я использую привязку данных для всего и условно устанавливаю fontWeight на основе поступающих данных. Все более сложное должно произойти с функцией в теге Script.

<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark" 
                xmlns:mx="library://ns.adobe.com/flex/mx" 
                autoDrawBackground="true">

    <fx:Script>
        <![CDATA[
            protected function onClick(event:MouseEvent):void {
            }
        ]]>
    </fx:Script>

    <s:CheckBox x="5" click="onClick(event)" 
                label="{data.label}" selected="@{data.selected}" 
                fontWeight="{data.label == 'item1' ? 'bold' : 'normal'}"/>


</s:ItemRenderer>

InВ свете вашего вопроса, который вы добавили в свое редактирование, я бы спросил: какие критерии вы используете?Вы можете поместить любую функцию в ваше выражение привязки, поэтому, как минимум, вы можете сделать что-то вроде этого:

    <fx:Script>
    <![CDATA[
        private var itemsToBold:Array = ["label1", "label2"];

        private function getFontWeight(label):String {
            if(itemsToBold.indexOf(label) > 0)
                return "bold";

            return "normal";
        }

    ]]>
</fx:Script>

<s:CheckBox fontWeight="{getFontWeight(data.label)}"/>
...