2011-02-08 1 views
1

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

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

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

Спасибо.

EDIT: код добавляется для ItemRenderer, это работало, я просто нужно указать каждый элемент, который я хочу быть смелым, хотя есть лучший способ сделать это в гибком коде, в отличие от проверки на соответствия строка в рендерере?

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; 
     } 
    } 

Edit 2: What I am ultimately trying to do is create a dropdown of checkboxes with data that I obtain from blazeDS that basically has a bunch of group titles and their corresponding sub-elements. I am trying to have the dropdown make the groups be in bold and to the left, and their sub-elements normal font and offset to the right. I also need to know when they are clicked whether it was a group header or sub-element, so that I can add them to an object that I will be sending back to my service to perform a sql query on. ie.

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

+0

Показать код; не должно быть причин, по которым вы не можете создать itemRenderer, который выделяет некоторые элементы, но не другие. – JeffryHouser

+0

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

+0

Хотя я думаю, что на самом деле это было именно то, что мне нужно, я просто смог изменить цвет в itemRenderer, чтобы я знал, что могу изменить стиль всего. Хотя это лучший способ сделать это и иметь if-statements для каждого элемента, который я хочу полужирным? Я немного поработаю над этим, чтобы посмотреть, смогу ли я правильно его обработать и опубликую это сообщение – Mike

ответ

0

Что ваши данные выглядеть? Почему вы не используете 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> 

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

<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)}"/> 
+0

Спасибо за ваш ответ, я попытаюсь реализовать эту гибкую функциональность. Я не смог найти способ «Flexy» сделать это сам, поэтому мне пришлось обратиться к примеру ActionScript кода. Посмотрите мое новое редактирование для моей последней конечной цели. – Mike

+0

@Mike: Это совсем другой вопрос, чем на самом деле. Я думаю, вам нужен компонент Tree для этого ... или, по крайней мере, создать структуру данных, которая лучше поддерживает этот макет. Я предлагаю ответить на этот вопрос и задать новый вопрос с вашими новыми требованиями. –

+0

Дерево на самом деле не похоже на то, что я ищу, посмотрев на него, мне нужны они как флажки для выбора (если вы не можете сделать это с деревом тоже?). Даже заголовки групп как флажки.Хотя я закрою его, как ответ, но я смог создать решение (даже если оно, вероятно, довольно уродливое), которое соответствует моим потребностям – Mike

Смежные вопросы