Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Добавить кастомный mxml компонент в другой компонетн (http://www.flasher.ru/forum/showthread.php?t=130824)

NeMeN 06.10.2009 15:04

Добавить кастомный mxml компонент в другой компонетн
 
Всем здрасти.
Поиск не помог :( У меня такой вопрос. Как добавлять кастомные mxml компоненты в другие компоненты?
Например у меня есть контейнер который содержит блоки с новостями. Как динамически добавлять новость после клика на кнопку (виды новостей (компонентов) могут отличатся)? Если бы тип новости был только один, то всё бы решалось например через repeater и ArrayCollection.
Но вот как добавить в контейнер или repeater другой компонент? Или как возможно проверить какой компонент показывать?
Надеюсь суть вопроса ясна :)

Gubber 06.10.2009 15:13

Используй лист в котором используй свой рендерер с несколькими состоянимями. Для каждого состояния отображай только один компонент. А имя состояния можешь определять по типу данных передаваемых в set data(..).
Это самый простой вариант.

NeMeN 06.10.2009 18:53

Цитата:

Сообщение от Gubber (Сообщение 855807)
Используй лист в котором используй свой рендерер с несколькими состоянимями. Для каждого состояния отображай только один компонент. А имя состояния можешь определять по типу данных передаваемых в set data(..).
Это самый простой вариант.

Спасибо. Столкнулся с ещё одной трудностью:
Создал List в main application:
Код AS3:

<mx:List id="latestActions" dataProvider="{lastActionsProvider}" selectable="false" itemRenderer="components.historyBoxRenderer" width="100%" height="100%" />

historyBoxRenderer:
Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100%">
        <mx:Script>
          <![CDATA[
            private var _data:Object;
 
            override public function set data(value:Object):void
            {
                        _data = value;
                        removeAllChildren();
                        var hist_box:historyBox = new historyBox();
 
                        hist_box.selectedIndex = value.type;
 
                        addChild(hist_box);
 
                      //hist_box.news_txt.text = value.txt;    !!!! Ошибка
 
            }
 
            override public function get data():Object
            {
              return _data;
            }
          ]]>
        </mx:Script>
</mx:HBox>

historyBox:
Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<mx:ViewStack xmlns:mx="http://www.adobe.com/2006/mxml" width="100%">
        <mx:HBox id="s1" backgroundColor="{parentDocument.panelInsideColor}">
                <mx:Text width="100%" id="news_txt" text="text" />
        </mx:HBox>
        <mx:HBox id="s2">
                <mx:Text width="100%" id="news_txt2" text="text" />
        </mx:HBox>
</mx:ViewStack>

Проблема состоит в том, что когда в historyBoxRenderer в set data прописываю:
Код AS3:

hist_box.news_txt.text = value.txt;

выдаёт ошибку Cannot access a property or method of a null object reference :(

Gubber 06.10.2009 18:56

Во первых в set data не забывай делать
super.data=value
Во-вторых есть подозрение, что value == null
Сделай проверку на не null

NeMeN 06.10.2009 19:02

value != null, т.к. selectedIndex срабатывает как надо в зависимости от value.type. Проблема как раз в hist_box.news_txt, т.к. даже hist_box.news_txt.text = "xxx"; не работает. А почему именно не работает вообще идей нет.

Добавлено через 13 минут
нашёл в чём проблема, для ViewStack нужно прописать creationPolicy="all" :)


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

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