2014-03-30 100 views
0

我使用Adobe Flash CC創建操作HTML5畫布的輸出EaselJS。然而,將參數傳遞給事件監聽器的能力似乎存在巨大的疏漏。EaselJS傳遞事件參數

的問題是,我提供使用Raphael兼容性多個動畫輸出,一個使用EaselJS和一個,但是,其控制這些保持相同,這些是與存儲在屬性數據,我想調用函數普通的HTML元素的接口通過觸發事件並傳遞參數在Flash IDE中編寫。

我很容易找到避免使用EventDispatcher的方法,例如將它們註冊到根對象並直接用自定義處理程序調用它們。不過,我寧願保持我的Flash IDE輸出儘可能普遍兼容,而不污染我無法控制的對象的命名空間。我認爲這是一種糟糕的設計模式,需要在Flash IDE中編寫代碼才能在沒有外部幫助的情況下工作。

有沒有辦法將參數從EaselJS事件分派器傳遞到監聽事件?我知道on()提供了一個數據參數,但這是沒用的,因爲我需要根據用戶交互將不同的參數傳遞給同一個事件。

回答

0

您可以將任何屬性放在所需的Event對象上。當你發送一個事件時,你可以使用一個像「complete」這樣的字符串(如果你不需要參數,這樣會更好,因爲如果沒有監聽器,它不會生成一個對象)。如果你有參數,創建一個新的createjs.Event,並把一切在它的屬性,你想:

var event = new createjs.Event("complete"); 
event.time = new Date(); 
this.dispatchEvent(event); 

然後你就可以在你的處理器檢查事件對象。

myObject.addEventListener("complete", handler); // add a listener 
function handler(event) { 
    console.log(event.time); 
} 

希望有所幫助!

+1

請注意,如果重新分派EaselJS事件,則會克隆它,這會放棄您的自定義屬性。這應該不是問題,除非您手動重新分派事件,或者事件冒泡。 – Lanny

+0

它是否自從版本0.8起作用anumore –

+0

@DanielSantos - 你能澄清一下嗎?這個問題已經快一年了。如果您遇到問題,請發佈新問題。謝謝! – Lanny