Причина в том, что в mxml то, что вы пишете, на самом деле не обработчик, а то, что выполняется в обработчике. Если вы скомпилируете с флагом -keep-генерируемого действия (чтобы установить его в Flex Builder, щелкните правой кнопкой мыши, чтобы открыть Свойства проекта, выберите Компилятор Flex и добавьте -keep-генерированный-действия в дополнительные аргументы компилятора), вы можете увидеть сгенерировал исходный код для вашего компонента, чтобы компилятор создал обработчик для этого события, а тело состоит из того, что вы написали в mxml.
Так что если у вас есть что-то вроде:
click="doSomething();"
Вы уже можете заметить, что на самом деле вы даете там инструкцию, а не ссылку на метод, которую вы передаете, когда используете addEventHandler.
Тогда вы получите в сгенерированном файле что-то вроде:
private function myComponent_Click(evt : MouseEvent) : void
{
doSomething();
}
И где-то еще в том же файле добавление прослушивателя событий:
this.addEventListener(MouseEvent.CLICK, myComponent_Click);
Обратите внимание, что второй параметр не является результатом функции, это ссылка на функцию, потому что круглые скобки, обозначающие вызов функции, отсутствуют, и наша конкретная функция также не является получателем.
Вы также можете указать больше вызовов в mxml, например:
click="doSomething(); doSomethingElse();"
Вы даже можете передать параметр события в ваш метод:
click="doSomething(event);"
Все, что вы пишете в значении события mxml (не уверен, что это правильный термин для использования), станет телом сгенерированного обработчика для события actionscript.