Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Item Renderer для List (http://www.flasher.ru/forum/showthread.php?t=115337)

Pogrebeshka 27.08.2008 08:02

Item Renderer для List
 
Здравствуйте всем! :)

У меня появилась проблема, которую я не могу решить уже третий день. Мне надо создать кастомный ItemRenderer для List. Там надо чтобы в каждой строке был RadioButton и несколько CheckBox. "Галочки" пока проблем не вызвали, но радио батон изначально создал проблему, так как они должны быть в одной группе, но это решилось как-то. Создало проблему то, что я не ожидал. Я не могу к CheckBox применить CSS из внешнего файла. Вроде все нормально его загружаю но когда я пытаюсь приметьи СSS к нему, плейер выдает ошибку.

Если кто-нибудь знает как это можно реализовать проще, без написания собвенного класса, я буду вам весьма признателен.

Спасибо.

Вот код класса:
Код:

import flash.events.Event;
  import flash.net.URLLoader;
  import flash.net.URLRequest;
  import flash.text.StyleSheet;
 
  import mx.controls.CheckBox;
  import mx.controls.Label;
  import mx.controls.RadioButton;
  import mx.controls.listClasses.BaseListData;
  import mx.controls.listClasses.ListBase;
  import mx.controls.listClasses.ListItemRenderer;
  import mx.events.ListEvent;
 
  public class RadioButtonListItemRenderer extends ListItemRenderer
  {

      private var checkBoxViseble:CheckBox;
      private var radioButton:RadioButton;
      private var checkBoxSort:CheckBox;
      private var titleLabel:Label;
      private var styleSheet:StyleSheet;
      private var request:URLRequest;
      private var loader:URLLoader;
      private var styleMan:Object;
     
      public function RadioButtonListItemRenderer()
      {
              this.styleSheet = new StyleSheet();
        this.request = new URLRequest("style.css");
        this.loader = new URLLoader();
        this.loader.addEventListener(Event.COMPLETE,OnLoadCSS);
        this.loader.load(request);
      }

      private var list:ListBase;

      override protected function createChildren():void
      {
        super.createChildren();
       
        this.checkBoxViseble = new CheckBox();         
        this.radioButton = new RadioButton();
        this.checkBoxSort = new CheckBox();
        this.titleLabel = new Label();
       
        this.addChild(this.checkBoxViseble);
        this.addChild(this.radioButton);
        this.addChild(this.checkBoxSort);
        this.addChild(this.titleLabel);
      }
     
      override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
      {       
        super.updateDisplayList(unscaledWidth, unscaledHeight);

        this.checkBoxViseble.x = 3;
        this.checkBoxViseble.y = this.height / 2 - this.radioButton.height / 2;
        this.radioButton.x = 25;
        this.radioButton.y = this.height / 2 - this.radioButton.height / 2;
       
        this.checkBoxSort.x = 45;
        this.checkBoxSort.y = this.height / 2 - this.radioButton.height / 2;
        this.checkBoxSort.visible = false;

       
        this.label.x = 65;
       
      }
     
      private function OnLoadCSS(event:Event):void
      {
              this.styleSheet.parseCSS(loader.data);
              styleMan = this.styleSheet.getStyle(".visibleCBStyle");

              //проблема собсвенно возникает здесь.
      }
      override public function set listData(value:BaseListData):void
      {
        super.listData = value;
                 
        if (value.owner is ListBase)
        {         
            if (this.list)
            {
              this.list.removeEventListener(ListEvent.CHANGE, ownerChangeHandler);
            }
               
            this.list = value.owner as ListBase;

        }
      }
     
   
      private function ownerChangeHandler(event:ListEvent):void
      {     
        this.radioButton.selected = (this.data != null && this.data == this.list.selectedItem);
      }
     
  }


Pogrebeshka 27.08.2008 22:03

Может если кто знает как можно сделать кастомный ItemRenderer без AS класса, с использованием RadioButton - то это тоже будет решеним данной проблемы.

Molecula 27.08.2008 22:54

http://blog.flexexamples.com/2008/01...derer-in-flex/ - тут посмотрите, может на мысль наведет.

Pogrebeshka 27.08.2008 23:04

Спасибо большое за ссылку, но только там немного другое. Вся проблема в том что радио батон должен принадлежать к какой нибудь группе, в которой может быть выделен только один переключатель. Я не могу этого добиться при создании компонента как mxml. :(

2morrowMan 27.08.2008 23:36

ItemRenderer и в нем загрузка CSS — это уже полный ... т.е. неправильно!

Pogrebeshka 28.08.2008 00:02

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

Pogrebeshka 29.08.2008 02:29

Спасибо Молекула, та статья навела меня на то что мне надо было. Только не сразу, потому что я представлял себе это несколько иначе.

Molecula 29.08.2008 02:35

Гы ) Я вообще статью перепутал, ну да ладно.


Часовой пояс GMT +4, время: 21:39.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.