我正在尝试从项呈示器(主应用程序文件/ root的子项)调度自定义事件。
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>
渲染器(点击的内容):
MyEventDispatcher.Dispatcher.dispatchEvent(new MovieClickEvent(MovieClickEvent.CLICKED, data));
DetailedViewInfo(创建完成):
MyEventDispatcher.Dispatcher.addEventListener(MovieClickEvent.CLICKED, clickHandler);
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的子代:
他可能吗?我尝试导入所有相关的事件/类和相同的声明。即使我在Main.mxml中注释掉事件监听器,它也不起作用。我尝试在DetailedViewInfo中向项呈示器添加一个声明,但是这会导致应用程序崩溃并且没有任何可理解的错误。
有人可以向我解释应该如何做到这一点?我在我的应用程序中使用自定义事件并且之前没有发生过这种情况。任何帮助高度赞赏!
答案 0 :(得分:2)
在发送事件之后,您似乎正在添加事件侦听器。我在那里看到你有一个includeIn
语句:这意味着不会立即创建DetailedViewInfo
组件,但只有在输入MoviePage
状态时才会创建includeIn
组件。可以在创建组件并附加事件侦听器之前调度该事件。
此问题的快速解决方法是不使用<views:DetailedViewInfo id="detailed" visible="false" includeInLayout="false"
visible.MoviePage="true" includeInLayout.MoviePage="true" />
,而是根据当前状态设置组件的可见性:
{{1}}
但是,如果您需要使用此功能,可能需要查看您的体系结构。不幸的是,我不能告诉你更多,因为我不知道你目前的架构。