我想知道是否有方法将dispatchEvents与自定义事件函数调用一起使用,而不是在xml表单中实际实例化该函数,而是在脚本中执行此操作。我想要做的是,让开发人员使用我的自定义组件按钮,但将他/她自己的功能添加到已经添加到我自己的点击事件调用中。所以就像他/她想要添加那个点击事件的自己的验证功能一样。我有它的一种方法是在xml架构中的组件中创建一个实例。例如,我有它在哪里:
我有一个名为DialogWindow.mxml的mxml组件,里面有
<mx:Metadata>
[Event(name="cancBtnClick", type="flash.events.Event")]
[Event(name="okBtnClick", type="flash.events.Event")]
</mx:Metadata>
在我的DialogWindow.mxml脚本中,我创建了一个带有click事件的按钮,名为cancelAction(event);
_buttonCancel = new Button();
_buttonCancel.label = "Cancel";
_buttonCancel.addEventListener("click", cancelAction);
_buttonCancel.enabled = true;
在“cancelAction”函数中,我将dispatchEvent添加到cancBtnClick,因为这将是用户定义的函数。
protected function cancelAction(event:Event):void {
dispatchEvent(new Event("cancBtnClick"));
PopUpManager.removePopUp(this);
}
从另一个组件派生组件DialogWindow.mxml时,我可以使用此语句,其中myFunction取代了cancelAction函数中的cancBtnClick。
// from TestButton.mxml
<cmp:DialogWindow cancBthClick="myFunction()" />
以上工作正常,但如果我想在脚本中使用派生类调用来调用它。比如
public var dialogW:IFlexDisplayObject = null;
(dialogW as DialogWindow).cancBtnClick = "myFunction"; // this is an instance of DialogWindow
尝试这个时,当然没有cancBtnClick。所以我知道我没有正确实现这一点。如果您知道如何更改我的代码,那么我可以执行上述操作。我将非常感激。提前谢谢。
答案 0 :(得分:1)
在对话窗口中,您无法定义属性
public function set cancBtnClick(func : Function) : void
{
addEventListener("cancBtnClick", func);
}
然后根据需要使用
(dialogW as DialogWindow).cancBtnClick = myFunction;
希望,它会对你有帮助。
答案 1 :(得分:1)
你想:
(dialogW as DialogWindow).addEventListener("cancBtnClick", yourFunction);
public function yourFunction(event:Event):void {
// handle the event.
}
最好在完成后删除监听器。
(dialogW as DialogWindow).removeEventListener("cancBtnClick", yourFunction);