![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2010
Сообщений: 3
|
Есть класс Cell, представляющий собой структуру из нескольких int. Массив ar содержит несколько объектов класса Cell. Этот массив нужно сложным образом визуализировать.
Для этого я передаю его в качестве dataprovider в DataGroup. Когда создаю инлайн рендерер (в коде он закомментирован), он честно выводит строки [Object Cell] [Object Cell] [Object Cell]. <?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<s:layout>
<s:BasicLayout/>
</s:layout>
<fx:Declarations>
<!-- Разместить невизуальные элементы (например, службы или объекты значений) -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import Lab.Cell;
import mx.collections.ArrayCollection;
private var ar:Array = new Array(new Cell(0,0),new Cell(1,1), new Cell(2,2), new Cell(3,3) );
[Bindable]
private var ac:ArrayCollection = new ArrayCollection(ar);
]]>
</fx:Script>
<s:Panel x="27" y="22" width="434" height="343" id="lPanel" title="Lab3">
<s:DataGroup x="10" y="10" width="412" height="290" id="ldg"
dataProvider="{ac}" render="vc1">
<s:layout>
<s:TileLayout/>
</s:layout>
<!--<s:itemRenderer>
<fx:Component>
<mx:Label/>
</fx:Component>
</s:itemRenderer>-->
</s:DataGroup>
</s:Panel>
</s:Application>
<?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[
override public function set data(val:Object):void
{
super.data = val;
if (val.lTop==1) l1.text="T1" ;
else l1.text="T0";
}
]]>
</fx:Script>-->
<s:Label id="l1" />
</s:ItemRenderer>
Как нужно создавать рендер, который сможет отрисовывать пользовательский класс? В документации я встречал примеры работы только со строками... |
|
|||||
|
Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
|
А какие поля класса Селл нужно выводить?
|
|
|||||
|
Регистрация: Nov 2010
Сообщений: 3
|
Для простоты предположим, что Cell содержит
var flag1:int; var flag2:int; Если flag1==1 - то вывести цифру 1. Если flag1==2 - то покрасить фон в зеленый цвет. В задаче, которую я решаю, всё намного сложнее, однако сейчас важен сам принцип. |
|
|||||
|
Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
|
Обращаться к полям объекта, содержащегося в dataProvider можно так:
data.flag1 или data["flag1"] Добавлено через 38 секунд Имеется вииду внутри ItemRenderer |
|
|||||
|
Идем в справку и видим, что свойство itemRenderer принимает объекты IFactory. Смотрим там же, что реализует этот интерфейс и видим, что это ClassFactory, который в конструктор принимает ссылку на класс (в вашем случае на ваш ItemRenderer). Вот его вы и должны передать в свойсво itemRenderer у DataGrid, дабы не получать таких ошибок.
|
|
|||||
|
Регистрация: Nov 2010
Сообщений: 3
|
Спасибо всем за советы!
Проблема оказалась совсем в другом месте. Я назначал имя itemRenderera не свойству dataGroup.itemRenderer, a dataGroup.render. За что я люблю программирование - так за то, что оно учит внимательности. Что мне не нравится во Флексе - так это специфика проверки типов. |
|
|||||
|
Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 03:05. |
|
|
« Предыдущая тема | Следующая тема » |
|
|