PDA

Просмотр полной версии : Accordion и ViewStack, инициализация всех детей


miramax
09.02.2007, 07:25
Как инициализировать все чилды компонентов ViewStack, TabNavigator, Accrodion.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="main();">
<mx:Script>
<![CDATA[

public function main():void
{
trace(this.button1); // ok
trace(this.button2); // null
trace(this.button3); // null
}
]]>
</mx:Script>
<mx:Accordion x="185" y="10" width="200" height="150" >
<mx:Canvas width="100%" height="100%" >
<mx:Button id='button1'/>
</mx:Canvas>
<mx:Canvas width="100%" height="100%" >
<mx:Button id='button2'/>
</mx:Canvas>
<mx:Canvas width="100%" height="100%" >
<mx:Button id='button3'/>
</mx:Canvas>
</mx:Accordion>
</mx:Application>

Получается что элементы button2 и button3 - не инициализированы. Их можно инициализировать последовательно открыв все чилды, но это очень не удобно.

Azy
09.02.2007, 09:06
По идее никак. Думаю народ в Адобе грамотный, и при большом количестве элементов запуск приложения затянулся бы из-за инициализации. И имхо все контролы нужно инициализировать, только когда их нужно задействовать, т.е при открытии вкладки аккордеона, допустим. Не могу представить ситуацию, когда нужно инициализировать все.

miramax
09.02.2007, 09:17
Не могу представить ситуацию, когда нужно инициализировать все.Элементарно:
К примеру, контролы из одного чилда влияют на контролы из другого чилда.
Или, в моём случае, я получаю данные с сервера и модифицирую контролы. Баиндинга мне не достаточно, я ещё использую много специфических событий и переменных.

Azy
09.02.2007, 10:12
Хм. Думаю все-таки придется отлавливать ивент открытия чилда и модифицировать их в нем. А влияния заносить в стек, либо еще куда-то.

miramax
09.02.2007, 10:23
Хм. Думаю все-таки придется отлавливать ивент открытия чилда и модифицировать их в нем. А влияния заносить в стек, либо еще куда-то.
Да, вот подобными извращениями приходится заниматься. Но должно же быть более простое решение.

Azy
09.02.2007, 10:39
В принципе это и есть самое простое решение. Имхо контролы в одном чайлде вообще не должны знать что там происходит в других чайлдах. Обрабатывать информацию должен владелец, т.е. в данном случае аккордеон.

Nirth
09.02.2007, 13:51
Ази прав, ты сейчас фигней страдаешь, сделай менеджер который управяет контейнерами

__i
09.02.2007, 14:06
гы гы ребята, читайте ВНИМАТЕЛЬНО хелп, а еще полезно раскрывать в хелпе все наследованные(inherited) свойства/методы и прочую байду...

Шаманское заклинание в вашем случае выглядит так

<mx:Accordion creationPolicy="all">
.......
<mx:ViewStack creationPolicy="all">
.......
и так далее....

Nirth
09.02.2007, 14:59
Сразу видно, человек присытился флексом уже =)

__i
09.02.2007, 15:17
Nirth, не то слово, охото уже како-то интересно-полезной работы, а блин не лечить компоненты с помощью серпа и молота.

miramax
10.02.2007, 02:13
А, спасибо __i. :)
А то мне все задвигают про экономию ресурсов :D

Azy
11.02.2007, 16:16
в догонку
JUST SAY NO to creationPolicy="all" !
http://tech.groups.yahoo.com/group/flexcoders/message/54397