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

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

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

Регистрация: Apr 2009
Сообщений: 77
По умолчанию Как сделать перерисовку у flex spark компонента?

Добрый день.
Создал кастомный контрол и для него скин, не могу понять как перерисовать компонент, когда присвоено свойство?
Код AS3:
<s:SkinnableComponent xmlns:fx="http://ns.adobe.com/mxml/2009" 
		  xmlns:s="library://ns.adobe.com/flex/spark" 
		  xmlns:mx="library://ns.adobe.com/flex/mx" 
		  width="70" height="70"
		  buttonMode="true">
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			private var _coins:int = 1;
 
			public function set coins(value:int):void { _coins = value; }			
			public function get coins():int{return _coins; }
		]]>
	</fx:Script>
</s:SkinnableComponent>


Код AS3:
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" 
		xmlns:s="library://ns.adobe.com/flex/spark" 
		xmlns:mx="library://ns.adobe.com/flex/mx">
	<!-- host component -->
	<fx:Metadata>
		[HostComponent("view.components.UserAvatar")]
	</fx:Metadata>
	<s:Label id="coins"
			 color="0xFF0000"
			 text="{hostComponent.coins}"
			 fontSize="14"
			 fontWeight="bold"
			 x="3"
			 y="{hostComponent.height - coins.height}"/>
</s:Skin>
Добавлено через 1 час 16 минут
подсказали что вот так надо делать:

Код AS3:
<s:SkinnableComponent ...
	<fx:Script>
		<![CDATA[
			private var _coins:int = 1;
 
			public function set coins(value:int):void { _coins = value;skin.invalidateDisplayList(); }			
			public function get coins():int{return _coins; }
		]]>
	</fx:Script>
</s:SkinnableComponent>


Код AS3:
<s:Skin ...
<fx:Script>
		<![CDATA[
			override protected function updateDisplayList(w:Number, h:Number):void
			{
				super.updateDisplayList(w, h);
 
				coins.text = hostComponent.coins.toString();
			}
		]]>
	</fx:Script>
	...
</s:Skin>


Последний раз редактировалось il phoenix; 21.03.2012 в 16:33.
Старый 21.03.2012, 16:53
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
1. Не никакого смысла писать сам компонент в mxml.
2. Свойство используемое в байндинге должно быть с метатегом Bindable.
3. Части важные для логики работы компонента должны быть объявлены в самом компоненте с метатегом SkinPart. Это даст вам доступ к части скина в компоненте.

В общем вам сюда.

P.S. Перерисовка вызывается методом invalidateDisplayList().

Добавлено через 1 минуту
P.P.S. Обращайте внимание на все сообщения дебаггера, включая предупреждения, это поможет вам понять суть проблемы.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 21.03.2012, 17:59
il phoenix вне форума Посмотреть профиль Отправить личное сообщение для il phoenix Найти все сообщения от il phoenix
  № 3  
Ответить с цитированием
il phoenix

Регистрация: Apr 2009
Сообщений: 77
alatar, спасибо за советы

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
подсказали что вот так надо делать:
Отличный способ выстрелить себе в ногу. У вас нет гарантии, что в этот момент skin уже создан.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 22.03.2012, 13:28
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 5  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Цитата:
Сообщение от il phoenix Посмотреть сообщение
Код AS3:
<s:Skin ...
<fx:Script>
		<![CDATA[
			override protected function updateDisplayList(w:Number, h:Number):void
			{
				super.updateDisplayList(w, h);
 
				coins.text = hostComponent.coins.toString();
			}
		]]>
	</fx:Script>
	...
</s:Skin>
я бы это перенес в
Код AS3:
override protected function commitProperties():void
потому что перерисовка компонента может быть часто, например, разрешение экрана изменилось, так зачем же лишний раз из-за этого назначать значение

Цитата:
Сообщение от il phoenix Посмотреть сообщение
подсказали что вот так надо делать:
Код AS3:
invalidateProperties()
p.s. а, вообще, вам же просто байндэйбл [Bindable] нужно сделать у хост компонента переменную и назначить ее в скине кому нужно в качестве источника информации(в Вашем случае, видимо, для Label)
p.p.s. hostComponent, по идее, вообще не должен знать о том есть у него skin или нет


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

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

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


 


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


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