![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Feb 2009
Сообщений: 180
|
Здравствуйте, есть простенький MXML компонент на основе SkinnableContainer:
<?xml version="1.0" encoding="utf-8"?> <s:SkinnableContainer xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" styleName="mySkin" addedToStage="init()"> <s:states> <s:State name="active"/> <s:State name="inactive"/> </s:states> <fx:Script> <![CDATA[ import spark.components.Button; public var selectButton:Button = new Button; public var closeButton:Button = new Button; private function init():void { selectButton.styleName = 'SelectButton'; closeButton.styleName = 'CloseButton'; this.addElement(selectButton); this.addElement(closeButton); } ]]> </fx:Script> <!-- <s:Button id="selectButton" includeIn="active, inactive" styleName="SelectButton" /> <s:Button id="closeButton" includeIn="active" styleName="CloseButton"/> --> </s:SkinnableContainer> Если использовать mxml синтаксис, то при обращении к кнопке, вылетает ошибка:"Cannot access a property or method of a null object reference". Если использовать AS3, то все работает ок. Вердикт в том, что кнопки, добавленные через mxml синтаксис, не успевают инициализироваться на момент обращения к ним извне. Проблема заключается в том, что мне нужно в данном компоненте использовать, как раз mxml, поэтому хотелось бы как-то обойти этот нюанс. Заранее благодарен за любой совет или помощь. Последний раз редактировалось Acrossfy; 21.02.2012 в 05:22. |
|
|||||
|
Регистрация: Feb 2009
Сообщений: 180
|
Мне не нужен init(). AS3 код вызванный по addedToStage="init()" работает отлично. Но мне нужно избавиться от AS3 в этом компоненте.
|
|
|||||
|
Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
|
Как у Вас выглядит AS3 код с mxml-компонентами?
|
|
|||||
|
Регистрация: Feb 2009
Сообщений: 180
|
Цитата:
Первый на MXML: <?xml version="1.0" encoding="utf-8"?> <s:SkinnableContainer xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" styleName="mySkin"> <s:Button id="selectButton" styleName="SelectButton" /> <s:Button id="closeButton" styleName="CloseButton"/> </s:SkinnableContainer> <?xml version="1.0" encoding="utf-8"?> <s:SkinnableContainer xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" styleName="mySkin" addedToStage="init()"> <fx:Script> <![CDATA[ import spark.components.Button; public var selectButton:Button = new Button; public var closeButton:Button = new Button; private function init():void { selectButton.styleName = 'SelectButton'; closeButton.styleName = 'CloseButton'; this.addElement(selectButton); this.addElement(closeButton); } ]]> </fx:Script> </s:SkinnableContainer> var myComp:MyComp = new MyComp; //создаю новый экземпляр rootContainer.addElement(myComp); //добавляю его в контейнер myComp.selectButton.label = 'New Button'; //Задаю лейбл для дочерней кнопки в этом копоненте myComp.addEventListener(MouseEvents.CLICK, someFunction); //Задаю событие Проблема состоит в том, что нужно использовать только первый способ, то бишь чистый MXML. Добавлено через 25 минут Разобрался. Чтобы дочерний компонент(кнопка в данном случае) инициализировался сразу со своим родителем, нужно добавить ему параметр – itemCreationPolicy="immediate". Тогда эта ошибка не возникает. То бишь вот так вот: <?xml version="1.0" encoding="utf-8"?> <s:SkinnableContainer xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" styleName="mySkin"> <s:Button id="selectButton" styleName="SelectButton" itemCreationPolicy="immediate" /> <s:Button id="closeButton" styleName="CloseButton" /> </s:SkinnableContainer> Последний раз редактировалось Acrossfy; 21.02.2012 в 14:23. |
|
|||||
|
Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
|
"инициализировался" и "добавлялся на сцену" - разные вещи.
|
|
|||||
|
Регистрация: Feb 2009
Сообщений: 180
|
Цитата:
Во-вторых, в начале топика я весьма четко обрисовал ситуацию:"При добавлении этого компонента где-либо в программе, мне нужно тут же обратиться к его дочерним объектам, то бишь кнопкам." В-третьих, см. название темы. Последний раз редактировалось Acrossfy; 21.02.2012 в 18:22. |
|
|||||
|
Регистрация: Mar 2011
Сообщений: 48
|
Цитата:
|
|
|||||
|
Регистрация: Feb 2009
Сообщений: 180
|
[IMG]http://s017.***********/i405/1112/f5/ca256d857b1c.png[/IMG]
А мне и не нужно ни creationComplete, ни init, ни addedtostage. Мне вообще не нужно запускать что-либо внутри самого моего компонента при его добавлении, в нем вообще не должно быть никакого кода и выше я это популярно объяснил. Мне лишь нужно добавить этот компонент в контейнер в моем главном View, и тут же задать дочерним объектам контейнера определенные параметры из этого самого View, и как я уже написал, решение давно найдено. |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:42. |
|
|
« Предыдущая тема | Следующая тема » |
|
|