簡體   English   中英

來自項呈示器的自定義事件未被類檢測到

[英]Custom Event from Item Renderer not detected by a class

我試圖從項呈示器(它是主應用程序文件/ 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中向項呈示器添加一個聲明,但是崩潰了應用程序,沒有任何可理解的錯誤。

有人可以向我解釋應該怎么做? 我在我的應用程序中使用自定義事件並且之前沒有發生過這種情況。 任何幫助高度贊賞!

在調度事件之后 ,您似乎正在添加事件偵聽器。 我看到你有一個includeIn語句:這意味着不會立即創建DetailedViewInfo組件,但只有在輸入MoviePage狀態時才會創建。 可以在創建組件並附加事件偵聽器之前調度該事件。

此問題的快速解決方法是不使用includeIn ,而是根據當前狀態設置組件的可見性:

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

但是,如果您需要使用此功能,可能需要查看您的體系結構。 不幸的是,我不能告訴你更多,因為我不知道你目前的架構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM