Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 类未检测到来自项目呈现器的自定义事件_Actionscript 3_Apache Flex_Events_Itemrenderer_Custom Event - Fatal编程技术网

Actionscript 3 类未检测到来自项目呈现器的自定义事件

Actionscript 3 类未检测到来自项目呈现器的自定义事件,actionscript-3,apache-flex,events,itemrenderer,custom-event,Actionscript 3,Apache Flex,Events,Itemrenderer,Custom Event,我试图从一个项目呈现器(它是主应用程序文件/根的子级)发送一个自定义事件 Main.mxml中的代码: <s:List id="movieGrid"itemRenderer="views.MovieRenderer" dataProvider="{new ArrayCollection()}"> </s:List> <s:Group width="100%" height="100%" bottom="60"> <vie

我试图从一个项目呈现器(它是主应用程序文件/根的子级)发送一个自定义事件

Main.mxml中的代码:

<s:List id="movieGrid"itemRenderer="views.MovieRenderer" dataProvider="{new ArrayCollection()}">
    </s:List>

<s:Group width="100%" height="100%" bottom="60">
            <views:DetailedViewInfo id="detailed" includeIn="MoviePage" />
    </s:Group>
DetailedViewInfo(创建完成):

MyEventDispatcher:

package events
{
    import flash.events.EventDispatcher;

    public class MyEventDispatcher
    {   
        public static var Dispatcher:EventDispatcher = new EventDispatcher();
    }
}
活动:

package events
{
    import flash.events.Event;

    public class MovieClickEvent extends Event
    {
        public function MovieClickEvent(type:String, theMovieData:Object, bubbles:Boolean=true, cancelable:Boolean=false)
        {
            super(type, bubbles, cancelable);
            this._result = theMovieData;
        }

        public function get result():Object
        {
            return this._result;
        }

        override public function clone():Event
        {
            return new MovieClickEvent(type, result, bubbles, cancelable)
        }

        public static const CLICKED:String = "MovieClickEvent.CLICKED";

        private var _result:Object;

    }
}
我能够在Main.mxml中成功侦听事件,但我还需要在SkinnableContainer(“DetailedViewInfo”)中检测到它,该容器也是Main.mxml的子容器:

<s:List id="movieGrid"itemRenderer="views.MovieRenderer" dataProvider="{new ArrayCollection()}">
    </s:List>

<s:Group width="100%" height="100%" bottom="60">
            <views:DetailedViewInfo id="detailed" includeIn="MoviePage" />
    </s:Group>
有可能吗?我尝试导入所有相关的事件/类以及相同的声明。即使我在Main.mxml中注释掉事件侦听器,它也不起作用。我尝试在DetailedViewInfo中向项目呈现器添加声明,但这导致应用程序崩溃,并且没有可理解的错误


有人能告诉我怎么做吗?我在应用程序中到处使用自定义事件,以前从未发生过这种情况。非常感谢您的帮助

似乎是在调度事件后添加事件侦听器。我看到您在那里有一个
includeIn
语句:这意味着不会立即创建
DetailedViewInfo
组件,但只有在进入
MoviePage
状态时才会创建。可以在创建组件和连接事件侦听器之前调度事件

此问题的快速解决方法是不使用
includeIn
,而是根据当前状态设置组件的可见性:

<views:DetailedViewInfo id="detailed" visible="false" includeInLayout="false"
    visible.MoviePage="true" includeInLayout.MoviePage="true" />


但是,如果需要,您可能需要检查您的体系结构。不幸的是,我不能告诉您更多,因为我不知道您当前的体系结构。

您没有为我们提供事件类。因为您有一个MovieClickEvent的自定义构造函数,所以不可能知道您将冒泡属性设置为什么。如果气泡设置为false(默认值),则List类的父级将永远不会接收事件。必须将Bubble设置为true,列表的父级才能接收从itemRenderer发送的事件。@www.Flextras.com他不是从itemRenderer发送的,而是从不在displaylist上的静态
EventDispatcher
实例发送的。因此,事件不会以任何方式冒泡。问题编辑为包含事件代码,我还尝试了冒泡true和false。@RIAstar我没有捕捉到这一点;接得好。我想我没有仔细检查代码,而是参考了说明不同情况的问题文本。我看不出有什么理由不可能。但我不知道出了什么问题。除非您将在调度事件后添加事件侦听器。我看到您在那里有一个
includeIn
语句:这意味着组件不会立即创建,而只有在进入
MoviePage
状态时才会创建。可以在创建组件和连接事件侦听器之前调度事件。也就是说,我不太喜欢静态EventDispatcher方法(我已经尝试过了),我会像@www.Flextras.com建议的那样通过冒泡传播事件。目前,我从本地sql数据库中获取约15个值,并将其传递给list/itemRenderer(渲染器仅使用3个值),单击该方法时,会将数据传递给DetailedViewComponent。但是现在考虑它似乎很愚蠢,性能或带宽在本地不是问题,所以我想我没有考虑太多。从现在起,我将直接从sqlLite db获取我的DetailedViewInfo组件的数据,谢谢!
<views:DetailedViewInfo id="detailed" visible="false" includeInLayout="false"
    visible.MoviePage="true" includeInLayout.MoviePage="true" />