我有一个使用... rest参数的函数如下:
public function dispatchActions(... actions):void
{
var params:Object = new Object();
params.actions = actions; // I also tried casting ie. = (actions as Array)
this.target.dispatchEvent(new ActionEvent(ActionEvent.dispatchActions, params));
}
我使用myActionObject.dispatchActions("all");
问题是,当侦听器收到调度的params对象并尝试访问actions数组时,它什么都不做。如果我尝试跟踪evt.params.actions
它跟踪空白,如果我尝试跟踪evt.params.actions[0]
,则跟踪未定义。
例如:
function actionsListener(evt:ActionEvent):void
{
var actions:Array = (evt.params.actions) as Array; // I also tried without casting
trace("actions", actions, "actions 0", actions[0], "action 1", actions[1]);
}
这是输出:actions actions 0 undefined actions 1 undefined
这里有什么问题?我不明白为什么我不能通过一个对象作为事件参数传递... rest参数。我怎样才能做到这一点?
谢谢。
答案 0 :(得分:1)
这对我有用:
sample("as", "asd");
private function sample(... actions):void
{
var o:Object = {};
o.array = actions;
sample1(o);
}
private function sample1(o:Object):void
{
trace(o.array[1]);//traces asd
}
答案 1 :(得分:1)
或者你可以这样做:
sample("as", "asd");
private function sample(... actions):void
{
sample1(actions);
}
private function sample1(o:Array):void
{
trace(o[1]);//traces asd
}
答案 2 :(得分:1)
看起来你的params对象没有正确发送事件......我认为ActionEvent
是你自己的自定义事件 - 你检查过:
1)您正在将params
对象正确传递给事件构造函数吗?
例如:
class ActionEvent extends Event{
public var params:Object;
public function ActionEvent(type:String, params:Object){
super(type);
this.params = params;
}
}
2)如果您正在重新调度事件,是否定义了clone
函数以确保您的params
也被克隆?
override public function clone():Event{
return new ActionEvent(type,params);
}