2010-09-18 4 views
1

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

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

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

ответ

1

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

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

1

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

var parent:Accordion = this.parent as Accordion; 

иметь доступ к публичным полям всех родителей.

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

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

0

Хм не уверен, что вы после этого, но, возможно, outerDocument является то, что вы после

например

<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> 
Смежные вопросы