Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.11.2010, 04:21
Monax123 вне форума Посмотреть профиль Отправить личное сообщение для Monax123 Найти все сообщения от Monax123
  № 1  
Ответить с цитированием
Monax123

Регистрация: Nov 2010
Сообщений: 3
Question ItemRender, который должен разобрать класс

Есть класс 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>
- то получаю ошибку из флеш-плеера "Не удалось создать средство визуализации элементов [object Cell]". Попытки подружиться при помощи переопределения сеттера ни к чему не привели.

Как нужно создавать рендер, который сможет отрисовывать пользовательский класс? В документации я встречал примеры работы только со строками...

Старый 20.11.2010, 17:16
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 2  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
А какие поля класса Селл нужно выводить?

Старый 20.11.2010, 18:13
Monax123 вне форума Посмотреть профиль Отправить личное сообщение для Monax123 Найти все сообщения от Monax123
  № 3  
Ответить с цитированием
Monax123

Регистрация: Nov 2010
Сообщений: 3
Для простоты предположим, что Cell содержит
var flag1:int;
var flag2:int;
Если flag1==1 - то вывести цифру 1.
Если flag1==2 - то покрасить фон в зеленый цвет.
В задаче, которую я решаю, всё намного сложнее, однако сейчас важен сам принцип.

Старый 20.11.2010, 18:18
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 4  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Обращаться к полям объекта, содержащегося в dataProvider можно так:
data.flag1
или data["flag1"]

Добавлено через 38 секунд
Имеется вииду внутри ItemRenderer

Старый 20.11.2010, 18:30
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 5  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Идем в справку и видим, что свойство itemRenderer принимает объекты IFactory. Смотрим там же, что реализует этот интерфейс и видим, что это ClassFactory, который в конструктор принимает ссылку на класс (в вашем случае на ваш ItemRenderer). Вот его вы и должны передать в свойсво itemRenderer у DataGrid, дабы не получать таких ошибок.

Старый 20.11.2010, 18:45
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 6  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Еще есть событие dataChange, чтобы не оверайдить сеттер
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 20.11.2010, 18:48
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 7  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Еще есть событие dataChange, чтобы не оверайдить сеттер
А смысл? сеттер data в ItemRenderer предназначен для оверрайда. Зачем удалять гланды через задний проход?

Старый 20.11.2010, 19:24
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 8  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Сравнение с задним проходом некорректно, это скорее альтернатива.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 20.11.2010, 20:52
Monax123 вне форума Посмотреть профиль Отправить личное сообщение для Monax123 Найти все сообщения от Monax123
  № 9  
Ответить с цитированием
Monax123

Регистрация: Nov 2010
Сообщений: 3
Спасибо всем за советы!
Проблема оказалась совсем в другом месте. Я назначал имя itemRenderera не свойству dataGroup.itemRenderer, a dataGroup.render.

За что я люблю программирование - так за то, что оно учит внимательности. Что мне не нравится во Флексе - так это специфика проверки типов.

Старый 20.11.2010, 22:50
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 10  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Сравнение с задним проходом некорректно, это скорее альтернатива.
Ну почему же некорректно? Это как минимум непродуктивно, т.к. в DataRenderer нет проверки на повторное добавление объекта.

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:06.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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