PDA

Просмотр полной версии : List и data.name


Лир
24.06.2010, 00:23
Доброго всем времени суток, недавно взялся за освоение Flex и столкнулся с проблемой. Пытаюсь создать свой компонент на основе List, в компоненте картинка и напротив неё Label - так выглядит одна строка списка. Вот код компонента:
<mx:List top="" xmlns:mx="http://www.adobe.com/2006/mxml" width="220" height="500" xmlns:local="*">
<mx:itemRenderer>
<mx:Component>

<mx:Grid >
<mx:GridRow paddingLeft="10" >
<mx:GridItem paddingLeft="0" width="1%" paddingTop="8" >
<local:ButtonForMenu />
</mx:GridItem>
<mx:GridItem width="99%">
<mx:Label text="{data.name}" color="#000000" />
</mx:GridItem>
</mx:GridRow>
</mx:Grid>

</mx:Component>
</mx:itemRenderer>
При вызове компонента в приложении вот код:
<local:MenuList dataProvider="{['Red','Orange','Yellow','Green','Blue','Indigo',
'Violet']}">

</local:MenuList>
по идее должны браться данные из dataProvider Label-ом, но не берет. Оказалось что если Label находится не в контейнере то данные берутся, а если в контейнере то данные он почему то не видит. Подскажите плз что не так и как с этим бороться?

Dimitry_II
24.06.2010, 03:17
А на кой в листе грид? - Неужели не проще вставить Canvas или HBox? - Не будет двоякости в подчиненности коллекций (List -> Grid -> Label)

dataProvider - коллекция стрингов, почему обращение идет data.name? - Где у объектов провайдера такое свойство?

Лир
24.06.2010, 18:56
При вызове компонента в dataProvider передается массив данных, вот
<local:MenuList dataProvider="{['Red','Orange','Yellow','Green','Blue',
'Indigo','Violet']}"></local:MenuList>
А text="{data.name}" должен передать элементу списка значение из массива, по вашему совету расположил всё на Canvas, однако данные в список всё равно не передаются, из контейнера почему-то не видит это свойство. И какое свойство использовать тогда если не data.name, я прочитал что именно data.name необходим...

Dimitry_II
24.06.2010, 23:32
Если бы было:
<mx:Array id="colors">
<fx:Object name="Red"/>
....
<fx:Object name="Violet"/>
</mx:Array>
<local:MenuList dataProvider="colors"/>
то можно было бы в рендерере обращаться к свойству name объекта массива (коллекции).
Но в твоем случае передается просто строковый массив.

Поэтому предлагаю (но не настаиваю на правильности):
1. Сделать примерно как я показал и обращаться к нужным свойствам.
или 2. Попробовать использовать просто data (а не data.name)

Лир
25.06.2010, 01:11
Вариант 2 сработал)))) Просто data возвращает данные, супер!! Спасибо вам боольшущее))))!!