在flex组件之间传递数据

Kev*_*vMo 3 apache-flex flex3 actionscript-3

我刚开始弯曲,如果这是一个愚蠢的问题,请原谅我.

现在我正在使用自定义事件将数据从一个组件传递到另一个组件.我的问题是事件只会冒泡.如何将数据传递给不是调度事件的组件的父组件?

这是基本布局.我正在尝试将组件1中的数据传递给组件3.

Application MXML
     Component 1
     Component 2
          Component 3
Run Code Online (Sandbox Code Playgroud)

cli*_*ers 10

如果图形/树中的所有组件都需要一条数据,那么最好的办法是在每个组件上公开一个公共可绑定属性.让子组件调度由父级处理的冒泡事件,父级可以设置可绑定属性的新值.如果将属性从父级绑定到子级,则会"级联"到其他组件.

<!-- in root application -->
<Component1 myData="{myData}"/>
Run Code Online (Sandbox Code Playgroud)

如果需要调用其他逻辑,可以定义get/set对而不是public var,并为setter添加逻辑:

[Bindable] private var _myData;
public function set myData(value:Object):void
{
    _myData = value;
    doSomeLogic();
}
Run Code Online (Sandbox Code Playgroud)

更好的方法是使用Flex的失效框架来优化性能:

_myDataChanged : Boolean = false;
[Bindable] private var _myData;
public function set myData(value:Object):void
{
    if (_myData != value) {
        _myData = value;
        _myDataChanged = true;
    }
    invalidateProperties();
}

override protected function commitProperties() : void {
    super.commitProperties();
    if (_myDataChanged) {
        _myDataChanged = false;
        doSomeLogic()
    }
}
Run Code Online (Sandbox Code Playgroud)

在构成Flex框架的所有UIComponent中,此模式在所有位置都使用.您可能还需要覆盖updateDisplayList(...)来定位元素.