gpt4 book ai didi

actionscript-3 - AS3 : How to know if dataprovider or its content(s) is changed

转载 作者:行者123 更新时间:2023-12-02 04:11:55 24 4
gpt4 key购买 nike

我正在实现某种组合框控件(通过扩展 spark.components.supportClasses.DropDownListBase )

现在,在这个控件里面;我需要知道:

  • 如果数据提供者被更改/分配。 (我可以做到……下面的第一种方法有效);
  • 如果 任何项目在 dataprovider 集合中发生了变化。

  • 我尝试了两种方法都没有成功...

    第一种方法:
            [Bindable("collectionChange")]
    override public function set dataProvider(value:IList):void
    {
    if (value) value.addEventListener(CollectionEvent.COLLECTION_CHANGE, onDataChange);

    super.dataProvider = value;
    trace("DATA CHANGED"); //fires
    }

    protected function onDataChange(event:CollectionEvent):void
    {
    trace("COLLECTION ITEM(S) CHANGED"); //does not fire
    }

    第二种方法:

    因为这是基于 DropDownListBase ;它应该发送 CollectionEvent.COLLECTION_CHANGE事件已经..?
            public function myClass() //constructor
    {
    addEventListener(CollectionEvent.COLLECTION_CHANGE, onDataChange);
    }

    protected function onDataChange(event:CollectionEvent):void
    {
    trace("DATA CHANGED"); //does not fire
    }

    有任何想法吗?

    更新:上面已编辑。第一种方法让我知道数据提供者是否已更改,但如果数据提供者集合中的任何项目已更新,则不会。第二种方法根本不起作用..

    最佳答案

    如果您向我们展示一个可运行的示例来演示问题,我们将能够提供更多帮助。

    1. if the dataprovider is changed/assigned.


    您的第一种方法应该有效。你能告诉我们是什么让你认为它没有吗? (我假设没有跟踪声明?)。并告诉我们您为更改 dataProvider 做了什么。

    第二种方法不起作用,因为 myClass 没有触发 collectionChange 事件。

    2 if any item in the dataprovider collection has changed.



    真的没有办法告诉这一点。在大多数情况下,集合只是指向其他对象的指针列表。如果您更改这些指针,则会触发一个 collectionChange 事件。如果您更改了他指向的项目,则集合无法知道某些内容已更改。如果您是 MXML 粉丝,绑定(bind)的工作方式非常相似。

    如果您可以控制项目的更改方式,则可以这样处理。代替:
    (collection.getITemAt(x) as myObject).property = newValue;

    做这样的事情:
      var myObject : MyObject = collection.getITemAt(x) as myObject
    myObject.property = newValue;
    collection.setItemAt(x, myObject);

    我希望这会触发一个 collectionChange 事件,但不是前者。

    也就是说,在 dropDownListBase 的上下文中:当您滚动或打开和关闭下拉菜单时,应该更新 itemRenderers 以反射(reflect)最新的 dataProvider 数据。但是,如果您在下拉菜单打开时动态更改某些内容,我不希望它自动更新[如果您不更改 dataProvider.

    关于actionscript-3 - AS3 : How to know if dataprovider or its content(s) is changed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4651860/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com