1

在 flex 3 中,我有一个分层数据结构。我想在树中显示它的内容。我的问题是我有从子节点计算数据的节点。如果子节点的数据发生更改,如何构建层次结构以自动更改这些父节点?例如:

  • 每个节点都有一个警告标志。如果某些子警告标志更改为真,那么父警告标志应自动更改设置为真。
  • 节点整数字段是子整数字段的总和,如果任何子整数字段发生变化,父整数字段会立即“计算”总和。

是否有一个简单的解决方案可以自动发生良好的结构更改,或者我必须制作一些自定义功能?

谢谢!

4

1 回答 1

0

我们通过遵循以下模式来做到这一点:

  1. 在父类上创建计算值的方法,并使其与事件绑定。
  2. 在父级中,为子集合更改时添加事件侦听器。为此,子集合应该是 ArrayCollection 或类似的。
  3. 拦截更改事件时,为步骤 1 中提到的方法引发(或有条件地引发)附加到 Bindable 元数据的事件。

这应该会导致任何正在查看父级聚合属性的 UI 都会在子级更新时更新。

这是一个例子:

public class Parent
{
    private var children:ArrayCollection = new ArrayCollection();

    public function Parent()
    {
        children.addEventListener(
            CollectionEvent.COLLECTION_CHANGE, 
            function(evt:CollectionEvent):void
            {
                if (...)
                {
                    dispatchEvent(new Event("warningStateChanged"));
                }
            }
        );
    }

    [Bindable("warningStateChanged")]
    public function containsWarnings():Boolean
    {
        for each (var child:Child in children)
        {
            if (child.hasWarning)
            {
                return true;
            }
        }
        return false;
    }
}
于 2009-06-17T17:28:45.217 回答