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

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

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

Регистрация: Feb 2011
Сообщений: 13
По умолчанию Линейное выполнение методов

Здравствуйте. Во флеше есть ряд методов, которые не возвращают результат своей работы, а вызывают событие, куда передают результат. Например метод FileReference.load().

Можно ли обернув этот метод в другую функцию заставить выполниться линейно, т.е. чтобы было так:
Код AS3:
var file = wrapLoad(fr);

Старый 17.06.2011, 01:12
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Неа, в большинстве случаев нет. В некоторых случаях можно через какой-нибудь хак, типа вызова фунции за пределами флеша, которая будет синхронно делать то же самое, что во флеше бы делалось асинхронно, но как правило ничего хорошего из этого не выйдет.
__________________
Hell is the possibility of sanity

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Гораздо эффективней будет поменять мышление и мыслить событиями, а не кадрами. Дело не в том, куда передается результат, а когда он будет получен. Время на получение файла неизвестно и никак не зависит от кода, но уж точно не равно нулю. Измените свою логику – другого пути просто нет, Вам не создать мгновенный интернет во всем мире, по-крайней мере не сейчас))) Приложение это не линейная последовательность [кадров, процедур], приложение реагирует на события, время и порядок которых неизвестны (зависят от действий юзера) – логично что оно состоит из блоков, реагирующих на определенные события. Линейности тут просто нет места и никогда не было.
__________________
Reality.getBounds(this);

Старый 17.06.2011, 01:38
Deadly0 вне форума Посмотреть профиль Отправить личное сообщение для Deadly0 Найти все сообщения от Deadly0
  № 4  
Ответить с цитированием
Deadly0

Регистрация: Feb 2011
Сообщений: 13
Мне нужно из выбранных пользователем файлов (FileReferenceList.browse()) получить информацию из этих файлов, записать инфу в массив и вызвать функцию JS. Хотелось бы так, но getData() использует load():

Код AS3:
var data: Array = [];
 
for (var i: uint = 0, len: uint = files.length; i < len; i++)
{
	data.push(getData(files[i]));
}
 
ExternalInterface.call('flashExternalCall_selectedFilesHandler', data);
Если добавлять данные по событию загрузки, то когда вызывать ExternalInterface.call('flashExternalCall_selectedFilesHandler', data)?


Последний раз редактировалось Deadly0; 17.06.2011 в 01:43.
Старый 17.06.2011, 01:42
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Создавать очередь с отслеживанием, и когда все будут загружены - переходить к следующему этапу.
__________________
Reality.getBounds(this);

Старый 17.06.2011, 01:48
Deadly0 вне форума Посмотреть профиль Отправить личное сообщение для Deadly0 Найти все сообщения от Deadly0
  № 6  
Ответить с цитированием
Deadly0

Регистрация: Feb 2011
Сообщений: 13
Т.е при каждом возникновении события загрузки файла, проверять все ли файлы обработаны и тогда вызвать JS функцию?

Код AS3:
private function loadHandler(event)
{
    data.push(event.data);
 
    if (data.length === files.length)
    {
        ExternalInterface.call('flashExternalCall_selectedFilesHandler', data);
    }
}
Это считается правильным подходом?

Старый 17.06.2011, 01:53
S-ed вне форума Посмотреть профиль Отправить личное сообщение для S-ed Найти все сообщения от S-ed
  № 7  
Ответить с цитированием
S-ed
 
Аватар для S-ed

Регистрация: Jul 2001
Адрес: SPb.RU
Сообщений: 148
Отправить сообщение для S-ed с помощью ICQ
В мануле как раз рассматривается такой вариант с LIST_COMPLETE event:
http://help.adobe.com/en_US/FlashPla...renceList.html
__________________
RTFM

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ну идея такая, да. Реализация конечно содержит больше.. нюансов. Например push не гарантирует порядок в data как в files, а он бывает важен (возможно, не в такой ситуации).
__________________
Reality.getBounds(this);

Старый 17.06.2011, 02:08
Deadly0 вне форума Посмотреть профиль Отправить личное сообщение для Deadly0 Найти все сообщения от Deadly0
  № 9  
Ответить с цитированием
Deadly0

Регистрация: Feb 2011
Сообщений: 13
S-ed, Wolsh, спасибо, вроде бы идею понял

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

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

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


 


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


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