It's just so handy, build-in the ability to specify a callback directly
instead of a command to CommandEvent. Weirdly, a CommandEvent will never be generated with the callback way of doing things, but now CommandMenu and CommandButton will both support the callback syntax. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4629 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -35,16 +35,36 @@ public class CommandEvent extends Event
|
|||||||
* Use this method to dispatch CommandEvents.
|
* Use this method to dispatch CommandEvents.
|
||||||
*/
|
*/
|
||||||
public static function dispatch (
|
public static function dispatch (
|
||||||
disp :IEventDispatcher, cmd :String, arg :Object = null) :void
|
disp :IEventDispatcher, cmdOrFn :Object, arg :Object = null) :void
|
||||||
{
|
{
|
||||||
// Create the event
|
if (cmdOrFn is Function) {
|
||||||
var event :CommandEvent = create(cmd, arg);
|
var fn :Function = (cmdOrFn as Function);
|
||||||
|
var args :Array = (arg as Array);
|
||||||
|
if (args == null && arg != null) {
|
||||||
|
args = [ arg ];
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
fn.apply(null, args);
|
||||||
|
} catch (err :Error) {
|
||||||
|
var log :Log = Log.getLog(CommandEvent);
|
||||||
|
log.warning("Unable to call command callback, stack trace follows.");
|
||||||
|
log.logStackTrace(err);
|
||||||
|
}
|
||||||
|
|
||||||
// Dispatch it. A return value of true means that the event was
|
} else if (cmdOrFn is String) {
|
||||||
// never cancelled, so we complain.
|
var cmd :String = String(cmdOrFn);
|
||||||
if (disp == null || disp.dispatchEvent(event)) {
|
// Create the event to dispatch
|
||||||
Log.getLog(CommandEvent).warning("Unhandled controller command " +
|
var event :CommandEvent = create(cmd, arg);
|
||||||
"[cmd=" + cmd + ", arg=" + arg + "].");
|
|
||||||
|
// Dispatch it. A return value of true means that the event was
|
||||||
|
// never cancelled, so we complain.
|
||||||
|
if (disp == null || disp.dispatchEvent(event)) {
|
||||||
|
Log.getLog(CommandEvent).warning("Unhandled controller command " +
|
||||||
|
"[cmd=" + cmd + ", arg=" + arg + "].");
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
throw new ArgumentError("Argument 'cmdOrFn' must be a command (String) or a Function");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user