|
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
Диспатч события, единичный вариант?
Всем привет. Вот задался таким вопросом. К примеру у нас есть класс, который загружает инфу с сервера. Создадим 6 таких классов на сцене(соответственно с разными параметрами в конструкторе). Если через for все эти классы инициализировать, они начинают загрузку, как только вызван конструктор данного класса. Вопрос заключается в следующем. Загрузка будет происходить сразу же у всех классов после их инициализации, независимо от того, была ли загружена инфа с предыдущего класса или нет, который сделал запрос на сервер. Но из представленных вариантов, мы можем просто тупо продиспатчить всё это дело и добавить слушатель к каждому экземпляру. Соответственно, что это получается, к каждому экземпляру, присваивается слушатель? То есть 6 addEventListener в моем случае. Можно прицепить один слушатель, ко всем классам, но тогда нужно задать текущее состояние загрузки, типо 0/6 1/6 2/6 и по достижению загрузки всех экзепляров, работа происходит дальше. Но я не вижу в этом удобства. Есть ли иной вариант? Например просто добавить типо
В Java например, myClassLoader2 не будет создан, пока всё не создаться с myClassLoader, в том числе загрузка инфы с сервера. Речь конечно может идти не только о загрузке с сервера, даже банальная загрузка из локальной папки, какого либо файла. |
|
|||||
Регистрация: Apr 2009
Сообщений: 409
|
зачем тебе именно последовательная загрузка? начинать ее в конструкторе где есть какая-то еще логика, кроме самой загрузки - решенее сомнительное. почему все таки решил писать свой лоадер, а не брать готовый? если нужна цепочка загрузок, зачем делать через события, а не через хендлер onComplete?
|
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
faraday
Цитата:
Цитата:
Добавлено через 15 минут Конечно, можно сразу прогрузить все данные, картинки, файлы и т.п вещи и потом цеплять/клонировать, но, это займет неопределенное количество времени, если файлов много и сразу их прогружать, в некоторых случаях система может тупо зависнуть, поэтому загружать их нужно по мере необходимости, а не все сразу. Отсюда получается, что надо в любом случае ловить хендлер у каждого нового объекта. Последний раз редактировалось Godwarlock; 13.04.2017 в 03:08. |
|
|||||
Регистрация: Apr 2009
Сообщений: 409
|
если решать задачу в лоб, то меняй события, на методы инициализации класса, с ними работать проще
дальше задаешь последовательность и отправляешь ее в функцию параллельного вызова function listCall(handlers, cb){ var queue=handlers.length; handlers.forEach(function(handler) { handler(function(){ if (--queue==0) cb&&cb() }) }); } Типа таких, писал по-памяти. Но 100% что сама проблема у тебя в архитектуре, и решение такое тут не лучшее |
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
Хм. Ну да, вариант выглядит не очень красиво, массивы создавать с функциями, это аналогично созданию хранилища для необходимых объектов и отправлять их в один загрузчик на загрузку и подписать на загрузку всех данных из массива, один комплит хэндлер, после которого уже идет работа с данными, которые нужны в данный момент, ну и соответственно все эти данные куда-нибудь поместить, чтобы дергать оттуда и повторно не прогружать. Просто думал, может есть варианты, без лишних хэндлеров при помощи дефолтных методов as3
Да, архитектура у меня наверно далеко не самая лучшая, постепенно дорабатываю, вроде сейчас удобная, а потом понимаешь, что накосячил и можно сделать гораздо проще и лучше. В этом деле я еще пока копаюсь)) Хорошую схему можно использовать для многочисленных проектов, меняя только назначение компонентов, вопрос, как бы эту схему построить деликатней, но это уже вопрос времени и желания. |
|
|||||
Регистрация: Mar 2007
Сообщений: 319
|
В отличии от Java, нет возможности взаимодействовать с чем то синхронно (кроме FileStream, ExternalInterface.call), это сделано оправданно так как все вызовы выполняются в Main потоке и Flash заставляет этот Main поток разгружать событийной моделью.
В архитектурном плане обработка последовательности решается просто, нужно сделать некую абстракцию вида Task/Job/Runnable как Java мире
__________________
RocketJump |
Часовой пояс GMT +4, время: 03:21. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|