_worldModel.dispatchEvent(new CustomEvent(CustomEvent.READY));
你必須實例化一個自定義事件,而不是一個事件。巨大差距。
你也可以用你的自定義事件傳遞其他參數與調度的事件,如果你使用你的自定義事件的,這將被證明出奇得心應手嚴重
package com.b99.events
{
import flash.events.Event;
/**
* ...
* @author bosworth99
*/
public class AppEvents extends Event
{
public static const APP_READY :String = "application ready";
public static const XML_LOADED :String = "XML has loaded";
public static const CHANGE_COMPLETE :String = "state change complete";
public static const PAGE_ADDED :String = "page content added";
public static const PAGE_REMOVED :String = "page content removed";
public static const LIBRARY_LOADED :String = "external library loaded";
public static const IMAGE_LOADED :String = "external image loaded";
public static const LOAD_ERROR :String = "external load failed";
public var arg:*;
public function AppEvents(type:String, bubbles:Boolean = false, cancelable:Boolean = false, ...a:*)
{
super(type, bubbles, cancelable);
arg = a;
}
override public function clone():Event
{
return new AppEvents(type, bubbles, cancelable, arg);
}
}
}
然後,您可以通過任意數量的參數一起一個接收函數:
this.dispatchEvent(new AppEvents(AppEvents.LIBRARY_LOADED, false , false, _name, _library, _names));
並在接收函數中以數組的形式訪問它們。
private function onLibraryLoad(e:AppEvents):void
{
_digestExternalLib.removeEventListener(AppEvents.LIBRARY_LOADED, onLibraryLoad);
var currentIndex:int = AppData.navLocations.indexOf(e.arg[0], 0);
AppData.libraries.push(e.arg[0]);
AppData.libraryCon.push(e.arg[1]);
AppData.libraryNames.push(e.arg[2]);
}
我猛拉這從運作項目......但你應該能夠收集重要的位...... 祝你好運!
非常感謝,看起來確實非常有用!結果發現我的事件在聽者發起之前就被解僱了。真的有點傻。 – davivid 2011-05-12 14:41:57
在這種情況下,不需要分派CustomEvent類的實例。 – Ohas 2011-05-12 14:43:25
@Omer =你完全正確。由於OP的customEvent沒有增加額外的功能,因此靜態常量是所有必需的(並且可以在任何地方保存)。然而,在這種情況下,問題是「如何實現自定義事件」,而不是「如何使用靜態常量」...... – Bosworth99 2011-05-12 16:44:28