![]() |
|
||||||||||
|
|||||
|
Всем привет,
трабл такой: флекс подтягивает значения параметров заданных для компоненты в mxml, уже после начала создания её детей. В качестве иллюстрации явления, привожу кусок кода: <?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> Есть ли простой способ изменить такое поведение (лично для меня совершенно не очевидное) |
|
|||||
|
Спасибо Кэп))
Я не про эту ситуацию а про общий случай, когда родительская компонета должна передать параметры своим детям. Тогда простой биндинг не прокатывает. Если вы измените лейбл на кастомную компоненту, а текст на объект, это перестанет работать по описанной мною выше причине. Например объект параметров 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 } }} <?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> <?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> она создаёт детей раньше чем получает параметры, и соответственно не может им их передать Последний раз редактировалось pango; 28.08.2011 в 16:54. |
|
|||||
<?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>
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Замечательно, но это снова частный случай
Мне интересно, как отложить создание чайлдов, до момента когда родительская компонента будет располагать всеми параметрами с которыми она была объявлена, чтобы не городить огород с сетерами и тп, а указывать для каждого чайлда определённый параметр я пробовал отменить создание детей используя creationPolicy="none", и создавать их после creationComplete. Но в случае если creationPolicy="none", компонента забирает параметры после creationComplete и отловить этот момент невыходит |
|
|||||
|
Если так хочется воспользоваться байдингом, нет необходимости передавать параметры до создания дочерних компонентов. В нормальной архитектуре не должно быть разницы.
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 } }} Цитата:
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
В том и дело что не хочется, и неясно зачем создавать детей сначала с левыми параметрами а потом с нужными.
Как выяснилось лечиться просто: В этом случае не нужны ни сеттеры, ни биндинг, работает как надо. Почему изначально invalidateProperties вызвается после создания чайлов я в толк не возьму. Экономии ноль, сплошная тень на плетень. Последний раз редактировалось pango; 28.08.2011 в 18:33. |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:40. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|