Как правильно обновлять детей Accordion во Flex? - PullRequest
1 голос
/ 26 января 2010

Прямо сейчас у меня есть компонент Accordion во Flex, у которого есть два дочерних элемента. Я хочу дать дочерним элементам ссылку на мою модель приложения, когда они завершат свою реализацию (после изменения индекса аккордеона).

Следующая запись для меня не работает, потому что экземпляры создаются после запуска события (метод accordionChange):

<mx:Accordion change="accordionChange(event)" > ...

Итак, в данный момент я добавляю creationComplete к каждому дочернему элементу Accordion, который затем назначит ссылку на модель:

<?xml version="1.0" encoding="utf-8"?>
<pod:InspectorClass xmlns:pod="pod.*" xmlns:mx="http://www.adobe.com/2006/mxml" >
<mx:Accordion id="accordion" color="0x323232" width="100%" height="100%">
    <mx:VBox label="Card Front" creationComplete="setChildModel()" >
        <pod:FaceInspector id="frontFaceInspector"/>
    </mx:VBox>
    <mx:VBox label="Card Back" creationComplete="setChildModel()" >
        <pod:FaceInspector id="backFaceInspector"/>
...

Мой класс «Код позади» InspectorClass содержит метод, который выглядит следующим образом:

    public function setChildModel():void
    {
        if ( accordion.selectedIndex == 0 )
        {
            frontFaceInspector.setModel(model);
        }
        else if ( accordion.selectedIndex == 1 )
        {
            backFaceInspector.setModel(model);
        }
    }

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

Спасибо

Ответы [ 3 ]

1 голос
/ 26 января 2010

На самом деле, я всегда видел, как использование прослушивателей событий и получение объектов для самостоятельной работы - одна из ключевых концепций Flex и AS. Я думаю, что вы делаете хорошо, но, как сказал Дурай, вы можете добавить

creationPolicy="all"

К вашему аккордеону, и вы можете запустить событие onchange.
например:

<mx:Accordion id="accordion" color="0x323232" width="100%" height="100%" creationPolicy="all" change="accordionChange(event)">

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

1 голос
/ 27 января 2010

Вы можете просто связать модель в каждом из ваших экземпляров FaceInspector по мере их объявления в MXML.

В вас FaceInspector Class (AS3 / code-behind) убедитесь, что свойство вашей модели общедоступно и доступно для привязки.

[Bindable]
public var model:Model;

Затем в вашем основном MXML (или там, где вы объявляете экземпляры FaceInspector), просто привяжите свойство модели к модели.

<pod:FaceInspector id="frontFaceInspector" model="{model}" />

Надеюсь, это то, что вы ищете.

Кроме того, если вашим экземплярам FaceInspector требуется доступ только к определенным свойствам вашей модели, я бы предложил сделать эти свойства связываемыми в классе модели и связать их напрямую. Э.Г.

<pod:FaceInspector id="frontFaceInspector" currentIndex="{model.sceneIndex}" imageURL="{model.image_url}" />
0 голосов
/ 26 января 2010

Вы можете использовать createpolicy как все. в аккордеонной составляющей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...