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

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

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

блогер
Регистрация: Dec 2006
Сообщений: 7
Записей в блоге: 1
Question mxml параметры

Всем привет,
трабл такой:
флекс подтягивает значения параметров заданных для компоненты в mxml,
уже после начала создания её детей.
В качестве иллюстрации явления, привожу кусок кода:

Код AS1/AS2:
<?xml version="1.0" encoding="utf-8"?>
<s:Group 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="400" height="300" xmlns:local="*"
		 >
	<s:Label text="{get_text()}"/>	
	<fx:Script>
		<![CDATA[
			[Bindable] public var text:String 
 
			public function get_text():String
			{
				return text
			}
		]]>
	</fx:Script>
</s:Group>
на момент вызова get_text() значение text будет null.
Есть ли простой способ изменить такое поведение
(лично для меня совершенно не очевидное)

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Код AS3:
<s:Label text="{text}"/>
__________________
משיח לא בא
משיח גם לא מטלפן

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

блогер
Регистрация: Dec 2006
Сообщений: 7
Записей в блоге: 1
Спасибо Кэп))

Я не про эту ситуацию а про общий случай,
когда родительская компонета должна передать параметры своим детям.
Тогда простой биндинг не прокатывает.

Если вы измените лейбл на кастомную компоненту, а текст на объект,
это перестанет работать по описанной мною выше причине.

Например

объект параметров
Код AS3:
package
{
	import flash.events.EventDispatcher;
 
	public class Params extends EventDispatcher
	{
		public var text1:String
		public var text2:String
 
		public function Params(text1:String, text2:String):void
		{
			this.text1 = text1
			this.text2 = text2
		}
}}
Родительская компонента
Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas 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="400" height="300" xmlns:local="*"
		 >
		<local:ChildComp text="{params.text1}" y="20"/>	
		<local:ChildComp text="{params.text2}" y="20"/>
		<fx:Script>
			<![CDATA[
				[Bindable] public var params:Params 
			]]>
		</fx:Script>
</mx:Canvas>
Детская компонента
Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<s:Group 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="100" height="20">
		<s:Label text="{text}"/>
		<fx:Script>
			<![CDATA[
				[bindable] public var text:String
			]]>
		</fx:Script>
</s:Group>
когда в приложении я объявляю родительскую компоненту с параметрами
Код AS1/AS2:
<local:ParentComp params="{new Params('hello', ' world')}"/>
она создаёт детей раньше чем получает параметры,
и соответственно не может им их передать


Последний раз редактировалось pango; 28.08.2011 в 16:54.
Старый 28.08.2011, 17:06
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas 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="400" height="300" xmlns:local="*"
		 >
		<local:ChildComp id="firstChild" y="20"/>	
		<local:ChildComp id="secondChild" y="20"/>
		<fx:Script>
			<![CDATA[
				public function set params(value:Params):void
				{
					firstChild.text = value.text1;
					secondChild.text = value.text2;
				}
			]]>
		</fx:Script>
</mx:Canvas>
__________________
משיח לא בא
משיח גם לא מטלפן

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

блогер
Регистрация: Dec 2006
Сообщений: 7
Записей в блоге: 1
Замечательно, но это снова частный случай

Мне интересно, как отложить создание чайлдов, до момента
когда родительская компонента будет располагать
всеми параметрами с которыми она была объявлена,

чтобы не городить огород с сетерами и тп,
а указывать для каждого чайлда определённый параметр

Код AS3:
<comp_a param="{param.a}"/>
<comp_b param="{param.b}"/>
я пробовал отменить создание детей используя
creationPolicy="none", и создавать их после creationComplete.

Но в случае если creationPolicy="none",
компонента забирает параметры после creationComplete
и отловить этот момент невыходит

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Если так хочется воспользоваться байдингом, нет необходимости передавать параметры до создания дочерних компонентов. В нормальной архитектуре не должно быть разницы.
Код AS3:
package
{
	import flash.events.EventDispatcher;
 
	public class Params extends EventDispatcher
	{
		[Bindable]
		public var text1:String
		[Bindable]
		public var text2:String
 
		public function Params(text1:String, text2:String):void
		{
			this.text1 = text1
			this.text2 = text2
		}
}}
Цитата:
и отловить этот момент невыходит
Что у вас отловить не выходит?
__________________
משיח לא בא
משיח גם לא מטלפן

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

блогер
Регистрация: Dec 2006
Сообщений: 7
Записей в блоге: 1
В том и дело что не хочется, и неясно зачем создавать детей сначала с левыми параметрами а потом с нужными.

Как выяснилось лечиться просто:
Код AS1/AS2:
preinitialize="{invalidateProperties()}"
В этом случае не нужны ни сеттеры, ни биндинг, работает как надо.

Почему изначально invalidateProperties вызвается после создания чайлов я в толк не возьму.
Экономии ноль, сплошная тень на плетень.


Последний раз редактировалось pango; 28.08.2011 в 18:33.
Создать новую тему Ответ Часовой пояс GMT +4, время: 22:40.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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