Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Spark List в котором 1 элемент не такой как все (http://www.flasher.ru/forum/showthread.php?t=164469)

Art_133 16.08.2011 16:34

Spark List в котором 1 элемент не такой как все
 
Привет.
Приходят данные, которые необходимо вывести как список. Использую Spatk List.
Все элементы, кроме одного, выглядат как обычные текстовые ссылки. А один отличается, имеет 1 картину, и 2 текстовых поля.
Вид такой:
Код:

[Image, TextField, TextField]
[TextField]
[TextField]
[TextField]
[TextField]
...
[TextField]

Вопрос в том, как реализовать этот отличающийся элемент?
Идея такова. Сделать катостомный ItemRenderrer и с двумя states: normal и advanced

Потом менять внешний вид первого элемента так:
Код AS3:

this.list.getChildAt(0).currentState = 'advanced';

Но мне кажется, что есть метод по изящнее.

GBee 16.08.2011 17:01

Идея такова. Сделать катостомный ItemRenderrer и с двумя states: normal и advanced

переопределить set data, и там все менять

Art_133 16.08.2011 18:41

Сделал так, как Вы порекомендовали.
Столкнулся с проблемой, картинку не видно, как будто curretnState == normal, но это не так. Где я не прав?
Ниже код:
ArrayCommection:
Код AS3:

 
<s:ArrayCollection id="data">
    <s:source>
        <fx:Object imagePath="imagePath" label="Title" body="Text text text text text text text text" />
        <fx:Object label="Title2"        videoID="38" />
        <fx:Object label="Title3"        videoID="38" />
        <fx:Object label="Title4"        videoID="38" />
        <fx:Object label="Title5"        videoID="38" />
        <fx:Object label="Title6"        videoID="38" />
        <fx:Object label="Title7"        videoID="38" />
        <fx:Object label="Title8"        videoID="38" />
    </s:source>
</s:ArrayCollection>

List:
Код AS3:

<s:List
        id="list"
        width="100%" height="100%"
        contentBackgroundAlpha="0.0" borderAlpha="0.0"
        dataProvider="{this.data}"
        itemRenderer="pages.newsPage.NewsPageGalleryIR">
</s:List>

pages.newsPage.NewsPageGalleryIR:
Код AS3:

<?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="false">
        <fx:Script>
                <![CDATA[
                        override public function set data(value:Object):void
                        {                               
                                //
                                if(value.imagePath) currentState = 'advanced';
                                super.data = value;                       
 
                                trace(this.currentState); // Трейс срабатывает, значит сюда попадаем
                                trace(this.image); // null - всегда, даже если this.currentState == 'advanced';
 
                        }
                ]]>
        </fx:Script>
 
        <s:states>
                <s:State name="normal" />
                <s:State name="advanced" />
        </s:states>
 
        <s:Label text="{data.label}"/>
        <s:Image
                id="image"
                source="www.image.com/image.png"
                includeIn="advanced"
                />
 
</s:ItemRenderer>


alatar 16.08.2011 18:47

List#itemRendererFunction

Art_133 16.08.2011 18:51

Да, я это был план B, но почему не работает первый вариант? Что я не так делаю?

alatar 16.08.2011 19:04

Цитата:

trace(this.image); // null - всегда, даже если this.currentState == 'advanced';
Сеттер сработает раньше, чем состояние сменится.

Art_133 16.08.2011 19:08

Но почему нет картинки, ведь я её вставил в 'advanced'?
Код AS3:

<s:Image 
                id="image"
                source="www.image.com/image.png"
                includeIn="advanced"
/>


alatar 16.08.2011 19:17

Протокол добавьте в адрес.
По этому адресу есть картинка?

Art_133 16.08.2011 19:21

Да, картинка есть. "www.image.com/image.png" - для примера.


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

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