Как получить доступ к переменной в родительском компоненте из дочернего компонента? - PullRequest
1 голос
/ 18 сентября 2010

У меня есть открытая переменная, установленная в тегах fx:Script в родительском компоненте, к которой я бы хотел получить доступ напрямую из дочернего компонента.Как я могу это сделать?Я не хочу передавать переменную дочернему компоненту (я знаю, как это сделать, и в настоящее время использую этот подход).Ниже приведена упрощенная версия mxml:

Примечание: SimpleComp - это HBox с парой списков.

<mx:Accordion>
    <comp:SimpleComp/>
</mx:Accordion>

Ответы [ 4 ]

1 голос
/ 18 сентября 2010

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

Если вам нужно много делать, есть отличная реализация NSNotificationCenter от Apple в AS3, определенная здесь: http://www.archer -group.com / development / mimicking-cocoas-nsnotificationcenter-in-actionscript-3 , что позволит вашим объектам более надежно и надлежащим образом взаимодействовать друг с другом.

1 голос
/ 18 сентября 2010

Вы можете сделать следующее в коде вашего компонента SimpleComp:

var parent:Accordion = this.parent as Accordion;

для доступа ко всем открытым полям родителей.

Но это не очень хороший стиль, как уже упоминалось выше.

Мб, вы должны рассмотреть какой-нибудь механизм диспетчеризации событий или использовать инфраструктуры mvc, такие как PureMVC.

1 голос
/ 18 сентября 2010

Вы можете использовать событие для общения, в этом смысле Сигналы могут быть очень хорошим подходом http://www.peterelst.com/blog/2010/01/22/as3-signals-the-best-thing-since-sliced-bread/

0 голосов
/ 19 сентября 2010

Хм, не уверен, что вы ищете, но, возможно, externalDocument - это то, что вы ищете

, например

<mx:DataGrid>
    <mx:columns>
        <mx:DataGridColumn>
            <mx:itemRenderer>
                <fx:Component>
                    <s:MXDataGridItemRenderer autoDrawBackground="false">
                        <fx:Script>
                            <![CDATA[
                                public function action():void
                                {
                                    trace(outerDocument.fooBar);
                                }
                            ]]>
                        </fx:Script>
                        <s:states>
                            <s:State name="normal" />            
                            <s:State name="hovered" />
                            <s:State name="selected" />
                        </s:states>
                    </s:MXDataGridItemRenderer>
                </fx:Component>
            </mx:itemRenderer>
        </mx:DataGridColumn>
    </mx:columns>
</mx:DataGrid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...