根据分层数据结构中的子字段计算的父数据

发布于 2024-07-25 00:31:24 字数 305 浏览 3 评论 0原文

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

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

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

谢谢!

In flex 3 I have a hierarchical data structure. I would like to display the content of it in a tree. My problem is that I have nodes which data calculated from children nodes. How to structure the hierarchy to make automatic changes to those parent nodes, if their children's data changed?
For example:

  • Every node has a warning flag. If some of the children warning flag changed to true, then the parent warning flag should change automatically set to true.
  • A node integer field is the sum of the children integer fields, and if any of the children changes, the parent integer field "calculates" the sum immediately.

Is there an easy solution wit good structuring changes happen automatically, or I have to make some custom functions?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

恬淡成诗 2024-08-01 00:31:24

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

  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;
    }
}

We do this by following this pattern:

  1. Create the method for calculating the value on the parent class, and make it bindable with an event.
  2. In the parent, add an event listener for when the child collection changes. To do this, the child collection should be an ArrayCollection or similar.
  3. When intercepting the change event, raise (or conditionally raise) the event attached to the Bindable metadata for the method mentioned in step 1.

This should cause any UI that's watching the aggregate property of the parent to be updated whenever a child is updated.

Here's an example:

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;
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文