我在父组件的fx:Script
标记内设置了一个公共变量,我想直接从子组件访问。我怎样才能做到这一点?我不想将变量传递给子组件(我知道如何做到这一点,我目前正在使用这种方法)。以下是mxml的简化版本:
注意: SimpleComp 是一个带有几个列表的HBox。
<mx:Accordion>
<comp:SimpleComp/>
</mx:Accordion>
答案 0 :(得分:1)
您可以使用事件进行通信,从这个意义上说,信号可能是一种非常好的方法 http://www.peterelst.com/blog/2010/01/22/as3-signals-the-best-thing-since-sliced-bread/
答案 1 :(得分:1)
您希望在不使用其他设计模式的情况下任意直接访问不同类中的公共变量,这有点打破了封装原则。如果这是一次性事情,您可以定义您的子组件以在实例化时引用其父组件。
如果你需要做很多事情,那么在这里定义的AS3中的Apple NSNotificationCenter的优秀实现:http://www.archer-group.com/development/mimicking-cocoas-nsnotificationcenter-in-actionscript-3将允许你的对象更加健壮和恰当地相互通信。
答案 2 :(得分:1)
您可以在SimpleComp组件的代码中执行以下操作:
var parent:Accordion = this.parent as Accordion;
可以访问所有父级的公共字段。
但如上所述,这不是好的风格。
你应该考虑一些事件调度机制或使用像PureMVC这样的mvc框架。
答案 3 :(得分:0)
嗯,不确定你的目标是什么,但也许 outerDocument 就是你的目标
e.g。
<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>