Представим себе ситуацию: приходят некие данные, нам нужно запростить у пользователя подтверждение, и в зависимости от ответа пользователя, обработать эти данные тем или иным способом.
Это будет выглядеть как-то так:
public function ProcessInvitation(event : ConferenceInvitationEvent) : void
{
var msg : String = event.senderName + ' invites you to conference';
Alert.yesLabel = 'Accept';
Alert.noLabel = 'Decline';
Alert.show(msg, 'Invitation', Alert.YES | Alert.NO | Alert.NONMODAL, null, Answer);
Alert.yesLabel = 'Yes';
Alert.noLabel = 'No';
}
private function Answer(ev : CloseEvent) : void
{
if(ev.detail == Alert.YES) // do something
else // do something esle
}
Все хорошо, но вот досада -- в функции Answer нам нужно знать, какие данные обрабатывать. То есть, там нужно иметь ConferenceInvitationEvent. Ну не беда, сохраним это временно в свойстве класса да и обработаем.
Но не катит. Пока пользователь думает над одним запросом, за это время может придти еще N других. И в фукнции Answer надо как-то определять, а на какой из N запросов был дан ответ пользователем. И тут начинаешь думать в направлении, как бы завести хеш для хранения необработанных запросов, как бы передать нужный ключ через Alert в функцию Answer, чтобы по нему взять нужные данные. А можно ли вообще что-то кастомное передать через Alert? Надо гуглить, экспериментировать.
Внезапно -- бац. Да все гораздо проще! Answer должен быть локальной функцией!
public function ProcessInvitation(event : ConferenceInvitationEvent) : void
{
var msg : String = event.senderName + ' invites you to conference';
// NOTE: we use local function and have event in scope of this function
var Answer : Function = function(ev : CloseEvent) : void
{
fmsService.AnswerToInvitationToConference(event.senderID,
event.conferenceID, ev.detail == Alert.YES);
}
Alert.yesLabel = 'Accept';
Alert.noLabel = 'Decline';
Alert.show(msg, 'Invitation', Alert.YES | Alert.NO | Alert.NONMODAL, null, Answer);
Alert.yesLabel = 'Yes';
Alert.noLabel = 'No';
}
Здесь ConferenceInvitationEvent сразу попадает в область видимости локальной функции, и не нужно придумывать никакого гемора с хешами и ключами. PROFIT :)
Вообще-то раньше я нечасто применял локальные функции. Потом как-то заюзал замыкания. А теперь и такие вот фишки.
Еще пару бонусов:
http://juick.com/yzh44yzh/432378 -- тут о том, что я думаю по поводу Alert.yesLabel = 'Accept'
http://juick.com/yzh44yzh/432419 -- тут небольшой холиварчик на тему флекс -- говно
Кто еще не в жуйке? Вы многое теряете :)

Recent comments
5 days 22 hours ago
1 week 1 day ago
1 week 6 days ago
3 weeks 9 hours ago
4 weeks 3 days ago
4 weeks 3 days ago
4 weeks 3 days ago
4 weeks 3 days ago
5 weeks 9 hours ago
5 weeks 3 days ago