![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jul 2009
Сообщений: 20
|
Здравствуйте, у меня следующий вопрос:"При разборе кода примеров vkontakte API не могу понять одно место".
//Я еще плохо разбираюсь во флеше, actionscripte и ООП в частности. Разбираю код, представленный на: http://vkontakte.ru/pages.php?o=-1&p...F2%E0%EA%F2%E5 по ссылке: http://vkontakte.ru/source/Tetris.zip В файле DataProvider.as, в функции _sendRequest, я так понимаю идет отсыл данных. Как я понимаю, получает метод API и параметры для запроса. По аналогии с представленным в этом файле кодом я написал обращение к этой функции через функцию: public function getInstPril(uid:String,onComplete:Function):String
{
var t="ggg";
_sendRequest("isAppUser", {params:{uid:uid}, onComplete:onComplete})
return t;
}//end function
Далее по аналогии с вложенным в пример кодом пишу private var dataProvider: DataProvider; В конструкторе класса - dataProvider = new DataProvider(); До этого момента может и не все понимаю, но работает. Далее описываю метод для получения установил ли юзер приложение к себе или нет: public function getInstUser()//Вернем - установил ли юзер приложение
{
var inst_yes=0;//По умолчанию - приложение у юзера не установлено
//Получим массив данных пользователей:
var user_dead_mas:Array = new Array;
user_dead_mas=getFriendDataMas();//Получим копию массива данных всех юзеров
for(var d=0;d<user_dead_mas.length;d++)//Переберем весь массив
{
trace("d="+d);
setDInstTek(d);//Закинем в класс d
setDInstOk(0);//Укажем, что пользователь еще не обработан
trace("ok="+_global.test_ex.getDInstOk());
dataProvider.getInstPril(user_dead_mas[d]['uid'],function(success:Boolean)
{
//Здесь нужно получить id, который обрабатывается
if (success && _global.test_ex.getDInstOk()==0)
{
for (var fNode:XMLNode = this.firstChild; fNode != null; fNode = fNode.nextSibling)
{
var response_this: String;
for (var cNode:XMLNode = fNode.firstChild; cNode != null; cNode = cNode.nextSibling)
{
switch (cNode.nodeName)
{
case 'response': response_this = cNode.firstChild.nodeValue; break;
}//end switch
}//end for
}//end for
trace("this=="+this);
trace("response_this="+response_this);
var d_tek=_global.test_ex.getDInstTek();
_global.test_ex.setInstPrilUserAdd(d_tek,response_this);
_global.test_ex.setDInstOk(1);
}//end if (success)
}),100);//end dataProvider
}//end for
_global.test_ex.setObnovlenFriendIdMas(5);
trace("юзер="+inst_yes);
}//end function
Во-первых не понимаю строку:"dataProvider.getInstPril(user_dead_mas[d]['uid'],function(success:Boolean)". Это где эта фнкция висит? В dataProvider?. Не понимаю как можно передать в качестве параметра функцию.Или здесь что-то другое делается? Когда срабатывает код, описанный в этой getInstPril? Данные есть, обрабатываются, но как-то странно - в трейсе вижу, что перебирается for, а эта функция выполняется как-то независимо от цыкла. В руководстве:"http://vkontakte.ru/pages.php?o=-1&p=%C2%E7%E0%E8%EC%EE%E4%E5%E9%F1%F2%E2%E8%E5%20%EF%F0%E8%EB%EE%E6%E5%ED%E8%FF%20%F1%20API" написано, что:"Сервер принимает не более трёх запросов в секунду". Как сделать, чтобы эта (для меня непонятно где зависшая функция с передающим (или получающим?) в качестве параметра функцию (тоже не очень понятно как работающую), так вот чтобы эта функция была нормальым вызовом в цыкле и, например с проверкой на setTimeOut какойнибудь. Наверное не очень внятно обяснил, но если кто понял - уделите пожалуйста немного времени и объясните идиоту где тут собака порылась. Заранее спасибо. |
|
|||||
|
Это анонимная функция.
Или литерал функции. висит там же где и любая локальная переменная. Примеры для апи в контакте написаны пхп прогерами и мягко говоря не очень
__________________
Сам себе репортер |
|
|||||
|
Регистрация: Jul 2009
Сообщений: 20
|
значение response_this я могу получить только внутри этой функции. Даже к классу приходится обращаться как _global.test_ex.myFunction. Получается это обращение:"dataProvider.getInstPril(user_dead_mas[d]['uid'],function(success:Boolean)" вообще где-то в воздухе. Можно, конечно через всякие _global-ы работать, но как-то это не правильно наверное. А переписать функцию так, чтобы как обычный понятный мне метод не получается т.к. не понимаю смысл конструкции вообще. Может кто по шагам сможет объяснить мне тупоголовому что делается7
"if (success" не понимаю((( откуда success. И ели никто не против предыдущие вопросы тоже хотелось бы прояснить. Спасибо за внимание к теме. |
|
|||||
|
success это параметр, который получит данная анонимная функция.
Нужно смотреть по коду где вызывается функция, там и передается параметр.
__________________
Сам себе репортер |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
А чем Вас flashvars не устроили?
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Jul 2009
Сообщений: 20
|
Почитаю про анонимные функции))) Спасибо, что пнули.
Добавлено через 2 часа 52 минуты Впринципе есть getAppFriends.... но я не люблю легких путей!!!))) |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:39. |
|
|
« Предыдущая тема | Следующая тема » |
|
|