Flex: отправка параметров в Alert closeHandler - PullRequest
9 голосов
/ 22 февраля 2011

Можно ли отправить параметры в функцию оповещения closeHandler?Первый параметр, который получает функция - это CloseEvent, но как отправить еще один?

<s:Button id="btnLoadLocalData" label="Load data"
          click="Alert.show('Populate list with local data?', '', Alert.YES | Alert.CANCEL, this, loadLocalData(???parameters???), null, Alert.OK);"/>

Спасибо!

Ответы [ 4 ]

13 голосов
/ 22 февраля 2011

Подход может заключаться в создании closeHandler в области создания оповещения.

Вот пример:

<s:Button id="btnLoadLocalData" label="Load data" click="btnLoadLocalData_clickHandler(event)"/>

function btnLoadLocalData_clickHandler(event:Event):void {
  var someVar:Object = someCalculation();
  var closeHandler:Function = function(closeEvent:CloseEvent):void {
    // someVar is available here
  };
  Alert.show('Populate list with local data?', '', Alert.YES | Alert.CANCEL, this, closeHandler, null, Alert.OK);
}
11 голосов
/ 22 февраля 2011

Это должно быть возможно при использовании конструкции динамической функции Flex.Аналогичный вопрос был задан здесь .

Вот пример:

Параметры и обработчик:

var parameters:String = "Some parameter I want to pass";

private function loadLocalData(e:Event, parameter:String):void
{
  // voila, here's your parameter
}

private function addArguments(method:Function, additionalArguments:Array):Function 
{
  return function(event:Event):void {method.apply(null, [event].concat(additionalArguments));}
}

Ваш компонент:

<s:Button id="btnLoadLocalData" label="Load data"
          click="Alert.show('Populate list with local data?', '', Alert.YES | Alert.CANCEL, this, addArguments(loadLocalData, [parameters])), null, Alert.OK);"/>
10 голосов
/ 27 апреля 2011

Мой типичный метод обработки этого варианта использования - добавить данные в форму оповещения. Например

var o:Object = new Object();
o["stuff"] = "quick brown fox";

var alert:Alert = Alert.show("Message", "Title", mx.controls.Alert.YES | mx.controls.Alert.NO, null, OnAlertResult);
alert.data = o;

А затем в обработчике закрытия для оповещения

private function OnAlertResult(event:CloseEvent):void {
    trace(event.target.data);
}
2 голосов
/ 24 апреля 2012

Я обычно использую анонимную функцию, чтобы обернуть вызов функции параметрами:

Alert.show("Are you sure?", Alert.YES | Alert.CANCEL, null, function(event:CloseEvent):void{doSomething(event.detail, param1, param2);}, null, Alert.CANCEL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...