在Flex中不使用xml架构调用dispatchEvents的其他方法

时间:2011-02-23 07:28:19

标签: flash flex actionscript adobe

我想知道是否有方法将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。所以我知道我没有正确实现这一点。如果您知道如何更改我的代码,那么我可以执行上述操作。我将非常感激。提前谢谢。

2 个答案:

答案 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);