Как определить, какое событие наступило.

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в Flash-приложениях (ActionScript)
Ответить
AlexB
Сообщения: 12
Зарегистрирован: 02 дек 2010, 01:13

Как определить, какое событие наступило.

Сообщение AlexB »

Привет.
Мысль такая, хочу сделать класс (на базе VKApiNode) для API контакта, только расширить его. В том смысле, что не только получать строку с правильным запросом, но и постить ее, и получать/обрабатывать ответ.
Для этих целей, думаю создать ассоциативный массив. Наполняется в конструкторе:

Код: Выделить всё

             url_process["isAppUser"][0]=new URLLoader();            url_process["isAppUser"][1]=new URLRequest(); 
Т.е. для каждого метода создаем свой URLLoader и URLRequest. Далее - отправить все это дело - никаких проблем

Код: Выделить всё

         private function SendQ(Query: String, meth: String): void;        {            url_process[meth][1].method = URLRequestMethod.POST;            var url_var: URLVariables = new URLVariables(Query);            url_process[meth][1].data = url_var;            url_process[meth][0].addEventListener(Event.COMPLETE,onComplete);            url_process[meth][0].load(url_request);         } 
А вот дальше - вопрос! Как в функции обработчике - onComplete понять какой именно метод отработал ,т.е. грубо говоря из какого элемента массива тянуть полученные данные?

Код: Выделить всё

         private function onComplete(event: Event): void;        {            var SR: XML=new XML(???.data);            var ErCode: int=0;            if (???=='isAppUser')            {                AisAppUser(SR,ErCode);            }                            app_method=new TAppMethod(SR,ErCode);//некий базовый класс                 } 
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Как определить, какое событие наступило.

Сообщение Александр »

AlexB писал(а):Т.е. для каждого метода создаем свой URLLoader и URLRequest.
Может быть тогда к каждому Event.COMPLETE создать свою функцию onComplete ?
AlexB
Сообщения: 12
Зарегистрирован: 02 дек 2010, 01:13

Re: Как определить, какое событие наступило.

Сообщение AlexB »

Хочется шоб красивше было :)
Мне кажется я придумал - просто в массив еще добавляем [2] - Event. А в обработчике -

Код: Выделить всё

 if (url_process['isAppUser'][2]==event) 
По идее должно сработать, хотя еще не попробовал.
Вообще, сейчас заморочился созданием класса TVKApplication - что бы все необходимое уже было в нем, т.е. Main наследовать не от спрайта, а от этого класса - ну и только логику приложения в нем описывать, а все контактовские методы и все общение с серверами контакта и своими (получение ответов и конвертация к некому базовому виду - думаю, юзать ассоциативные массивы) - чтобы это уже было, а то полкода из приложения в приложение надо тянуть :)
Кстати, Александр, к тебе как к гуру вопрос - есть в AS3 некий аналог RaiseError - т.е. передачи из области try экспешена на более высокий уровень?
И второй вопрос - ламерский, но че-т я затупил :) Как правильно обработать ответ с ошибкой от контакта? Т.е. - ошибки приложение этот ответ не вызывает, просто данные не получаются. У меня только идея - смотреть наличие тэга error - если есть - генерить экспешн, а если нет - выкачивать данные, но че-та мне это конструкция с ифами не нравится, может быть есть более красивый способ?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Как определить, какое событие наступило.

Сообщение Александр »

AlexB писал(а):есть в AS3 некий аналог RaiseError - т.е. передачи из области try экспешена на более высокий уровень
Этого не знаю.
AlexB писал(а):Как правильно обработать ответ с ошибкой от контакта? Т.е. - ошибки приложение этот ответ не вызывает, просто данные не получаются. У меня только идея - смотреть наличие тэга error - если есть - генерить экспешн, а если нет - выкачивать данные
Так и делать.
Ещё можешь посмотреть как это сделано в библиотеке APIConnection. Там:

Код: Выделить всё

VK.api('getProfiles', { uids: flashVars['viewer_id'] }, fetchUserInfo, onApiRequestFail);
onApiRequestFail - ошибка api.
AlexB
Сообщения: 12
Зарегистрирован: 02 дек 2010, 01:13

Re: Как определить, какое событие наступило.

Сообщение AlexB »

Александр писал(а):
AlexB писал(а):есть в AS3 некий аналог RaiseError - т.е. передачи из области try экспешена на более высокий уровень
Этого не знаю.
Во, нашел наконец :) В AS'е - это throw
http://help.adobe.com/ru_RU/ActionScrip ... -7ed0.html
Можа пригодится :)
Ответить