承上一篇介紹Event事件流的基本概念
AS3的事件傳遞機制(Event、dispatchEvent及addEventListener)
再來介紹相關的檢查函數。
hasEventListener()方法:
檢查 EventDispatcher 對象是否為有註冊這個事件的監聽器。
willTrigger()方法:
檢查是否用此 EventDispatcher 對象或其父容器是否有註冊這個事件的監聽器
hasEventListener() 與 willTrigger()的區別是:hasEventListener() 只檢查它所屬的對象
而 willTrigger() 檢查對象以及對象的父容器是否有註冊這個事件(不管capture的值)。
假如像下面這樣的物件階層來說
今天我們對stage註冊事件
stage.addEventListener(MouseEvent.CLICK, stageClick);
則檢查box的willTrigger及hasEventListener
trace(box.willTrigger(MouseEvent.CLICK)); trace(box.hasEventListener(MouseEvent.CLICK));
的結果為
true
false
而若我們對box註冊事件
box.addEventListener(MouseEvent.CLICK, stageClick);
則檢查box的willTrigger及hasEventListener
trace(box.willTrigger(MouseEvent.CLICK)); trace(box.hasEventListener(MouseEvent.CLICK));
的結果為
true
true
而若我們對box註冊事件
box.addEventListener(MouseEvent.CLICK, stageClick);
則檢查stage的willTrigger及hasEventListener
trace(stage.willTrigger(MouseEvent.CLICK)); trace(stage.hasEventListener(MouseEvent.CLICK));
的結果為
false
false
代表box不在stage完整可能有的事件流的動線裡。