![]() |
|
||||||||||
|
|||||
|
Регистрация: May 2014
Сообщений: 182
|
В начале был класс... Нет, эти слова не из книги Мука о as4, это начало моего вопроса.
Задачей этого класса было обобщение работы некого множества других классов, но в определенный момент я взял и разбил этот класс ещё на несколько логических блоков и унаследовал их по цепочки. И вот импровизационный код одного из них, его задача получать объекты и манипулировать ими спустя некоторое время. package { public class ClassForTimeDelay extends SuperClass { private var _tasksDelayTime:Array; // массив с тасками для задержки время public function get length():int { return _tasksDelayTime.length;// геттер длины массива } // сюда передаются объекты, время которых нужно отсрочить private function handler(object:Object):void { // тут что-то происходит с объектом this.setDelayTime(object); } private function setDelayTime(object:Object):void { // создаю таск для выполнения тасков с задержкой времени var callbackTask:CallbackTask = new CallbackTask(this.postHandling, object); /*CallbackTask(callbackTask, ...rest)*/ // таск для выполнения калбека var delayTimeForTask:TimeDelayTaskForTask = new TimeDelayTaskForTask(callbackTask, 1000); /*TimeDelayTaskForTask(task, delayTime)*/ // подписываюсь под выполнение delayTimeForTask.addEventListener(TaskEvent.EXECUTE, delayTimeForTask_executeHandler); // и помещаю таск в массив тасков для задержки времени _tasksDelayTime[_tasksDelayTime.length] = delayTimeForTask; } // в этот метод передается тот самый объект protected function postHandling(object:Object):void { // тут я помещаю его в массив суппер-класса super.objects[super.objects.length] = object; // и сразу по добавлению мне нужно послать событие, чтобы из массива // в супер классе взяли объект super.dispatchEvent(new CustomEvent(CustomEvent.GO_NEXT)); } // тут все подчищается... private function delayTimeForTask_executeHandler(event:TaskEvent):void { var delayTimeForTask:TimeDelayTaskForTask = event.target as TimeDelayTaskForTask; delayTimeForTask.removeEventListener(TaskEvent.EXECUTE, delayTimeForTask_executeHandler); _tasksDelayTime.splice(_tasksDelayTime.indexOf(delayTimeForTask), 1); } } } delayTimeForTask_executeHandler ещё не выполнен. Решений, как мне видится, два - 1) перенести диспатч в обработчик delayTimeForTask_executeHandler, но это будет не айс из-за того, что диспатч не будет относится логически к обработчику, да и код в обработчике то же нехорошо. 2) И второй вариант, унаследоваться от TimeDelayTaskForTask и передавать в него сам объект, а в execute просто диспатчить о выполнении. Но с этим вариантом у меня много сомнений, я не уверен точно, что таск может быть просто классом-контейнером + классом-таймером одновременно. Что посоветуете? Спасибо. |
![]() |
Часовой пояс GMT +4, время: 18:57. |
|
|
« Предыдущая тема | Следующая тема » |
|
|