Другие способы вызова dispatchEvents без использования XML-схемы во Flex - PullRequest
0 голосов
/ 23 февраля 2011

Я хотел знать, есть ли способы использовать dispatchEvents с пользовательскими вызовами функций событий, не создавая экземпляр функции в форме xml, но делая это в сценарии.Я пытаюсь сделать так, чтобы разработчик использовал кнопку моего пользовательского компонента, но добавил свою собственную функцию к тому, что уже добавлено в мой собственный вызов события click.так что в данном случае он / она хочет добавить собственную функцию проверки этого события клика.Один из способов - создать экземпляр в моем компоненте в XML-схеме.Например, у меня это где:

У меня есть компонент mxml под названием DialogWindow.mxml и внутри у меня есть

  <mx:Metadata>
    [Event(name="cancBtnClick", type="flash.events.Event")]
    [Event(name="okBtnClick", type="flash.events.Event")]
  </mx:Metadata>

и в моем скрипте в DialogWindow.mxml я создал кнопку с щелчкомсобытие с именем 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 имеет место cancBtnClick в функции cancelAction.

  // 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 ]

1 голос
/ 23 февраля 2011

Вы хотите:

(dialogW as DialogWindow).addEventListener("cancBtnClick", yourFunction);

public function yourFunction(event:Event):void {
  // handle the event.
}

Хорошей практикой также является удаление слушателя, когда вы закончите.

(dialogW as DialogWindow).removeEventListener("cancBtnClick", yourFunction);
1 голос
/ 23 февраля 2011

В вашем DialogWindow вы можете определить свойство

public function set cancBtnClick(func : Function) : void
{
    addEventListener("cancBtnClick", func);
}

А потом используй как хочешь

(dialogW as DialogWindow).cancBtnClick = myFunction;

Надеюсь, это поможет вам.

...