Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.07.2009, 12:39
Spazm вне форума Посмотреть профиль Отправить личное сообщение для Spazm Найти все сообщения от Spazm
  № 1  
Ответить с цитированием
Spazm

Регистрация: Jul 2009
Сообщений: 20
По умолчанию При разборе кода примеров vkontakte API не могу понять одно место

Здравствуйте, у меня следующий вопрос:"При разборе кода примеров 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, я так понимаю идет отсыл данных.
Код:
  private function _sendRequest(method:String, options:Object)
  {
     ...
  }
Как я понимаю, получает метод API и параметры для запроса.
По аналогии с представленным в этом файле кодом я написал обращение к этой функции через функцию:
Код:
  public function getInstPril(uid:String,onComplete:Function):String
  {
	  var t="ggg";
	  _sendRequest("isAppUser", {params:{uid:uid}, onComplete:onComplete})
	  return t;	  
  }//end function
Далее в произвольном классе test.as подключаю import Tetris.DataProvider;
Далее по аналогии с вложенным в пример кодом пишу 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 какойнибудь. Наверное не очень внятно обяснил, но если кто понял - уделите пожалуйста немного времени и объясните идиоту где тут собака порылась. Заранее спасибо.

Старый 20.07.2009, 14:16
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 2  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Это анонимная функция.
Или литерал функции. висит там же где и любая локальная переменная.

Примеры для апи в контакте написаны пхп прогерами и мягко говоря не очень

Старый 20.07.2009, 14:34
Spazm вне форума Посмотреть профиль Отправить личное сообщение для Spazm Найти все сообщения от Spazm
  № 3  
Ответить с цитированием
Spazm

Регистрация: Jul 2009
Сообщений: 20
значение response_this я могу получить только внутри этой функции. Даже к классу приходится обращаться как _global.test_ex.myFunction. Получается это обращение:"dataProvider.getInstPril(user_dead_mas[d]['uid'],function(success:Boolean)" вообще где-то в воздухе. Можно, конечно через всякие _global-ы работать, но как-то это не правильно наверное. А переписать функцию так, чтобы как обычный понятный мне метод не получается т.к. не понимаю смысл конструкции вообще. Может кто по шагам сможет объяснить мне тупоголовому что делается7
"if (success" не понимаю((( откуда success. И ели никто не против предыдущие вопросы тоже хотелось бы прояснить. Спасибо за внимание к теме.

Старый 20.07.2009, 14:47
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 4  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
success это параметр, который получит данная анонимная функция.
Нужно смотреть по коду где вызывается функция, там и передается параметр.

Старый 20.07.2009, 15:30
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
А чем Вас flashvars не устроили?
Цитата:
При отображении приложения посредством flashvars в него передаются следующие параметры:

* api_id – это id запущенного приложения.
...

* is_app_user – если пользователь установил приложение – 1, иначе – 0.
__________________
Reality.getBounds(this);

Старый 20.07.2009, 16:06
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Он у viewer_id друзей хочет проверить на isAppUser.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 20.07.2009, 16:15
Spazm вне форума Посмотреть профиль Отправить личное сообщение для Spazm Найти все сообщения от Spazm
  № 7  
Ответить с цитированием
Spazm

Регистрация: Jul 2009
Сообщений: 20
Почитаю про анонимные функции))) Спасибо, что пнули.

Добавлено через 2 часа 52 минуты
Впринципе есть getAppFriends.... но я не люблю легких путей!!!)))

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:41.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 02:41.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.