Como algunos sabrán, tenemos una nueva version de Cairngorm, la numero 3
Empecé investigando la que mas me llamó la atencion : Task Library
Les dejo acá algunos bloques de codigo de como utilizar esta libreria ya que amplia y mejora el concepto de commands que teniamos de la versión anterior de Cairngorm.
Una vez agregado el "task-1.7.swc" a la carpeta libs de su proyecto pueden hacer algo como esto:
Recomiendo leer de que se trata Task libraries previamente para comprender mejor su funcionamiento
Clase que solicita la ejecución de tareas en secuencia
StartupMainController.as
Código :
/** * Desencadena en forma secuencial las cargas necesarias para el proyecto */ public function firstSequenceTasks():void { var task:StartUpSequenceProcess = new StartUpSequenceProcess(); task.addEventListener(TaskEvent.CHILD_START, onTaskStart, false, 0, true); task.addEventListener(TaskEvent.TASK_PROGRESS, onTaskProgress, false, 0, true); task.addEventListener(TaskEvent.CHILD_COMPLETE, onTaskComplete, false, 0, true); task.addEventListener(TaskEvent.CHILD_FAULT, onTaskFault, false, 0, true); task.addChild(new ReadAppConfigTask()); task.addChild(new LoadUserProfileTask()); task.start(); } private function onTaskStart(event:TaskEvent):void { trace('onSequenceStart'); } private function onTaskProgress(event:TaskEvent):void { trace('onSequenceProgress'); } private function onTaskComplete(event:TaskEvent):void { trace('onSequenceComplete'); } private function onTaskFault(event:TaskEvent):void { trace('onSequenceFault'); }
Extensión de la clase SequenceTask de Cairngorm haciendo override de metodos muy necesarios en el futuro
StartUpSequenceProcess.as
Código :
public class StartUpSequenceProcess extends SequenceTask { public function StartUpSequenceProcess() { super(); } override protected function performTask():void { super.performTask(); } override protected function onChildTaskComplete(event:TaskEvent):void { super.onChildTaskComplete(event); } override protected function onChildTaskFault(event:TaskEvent):void { super.onChildTaskFault(event); } }
Extension de la clase Task despachando eventos necesarios para informar el estado de la tarea
BaseTask
Código :
/** * Clase base para los task, implementa el disparo de los eventos que debe tener cada Task concreto/final */ public class BaseTask extends Task { public function BaseTask() { super(); } override protected function performTask():void { this.dispatchEvent(new TaskEvent(TaskEvent.TASK_START, this)); } override protected function complete():void { this.dispatchEvent(new TaskEvent(TaskEvent.TASK_COMPLETE, this)); } override protected function fault(message:String = null):void { this.dispatchEvent(new TaskEvent(TaskEvent.TASK_FAULT, this)); } }
Tarea concreta en la que se deberá escribir el código que realiza dicha tarea
ReadAppConfigTask.as
Código :
/** * Clase encargada de leer la configuracion de la aplicacion */ public class ReadAppConfigTask extends BaseTask { public function ReadAppConfigTask() { super(); } override protected function performTask():void { super.performTask(); // write your code after call to super class trace('ReadAppConfigTask performTask'); this.complete(); } override protected function complete():void { trace('read app complete'); // write your code before call to super class super.complete(); } override protected function fault(message:String = null):void { trace('read app fault'); // write your code before call to super class super.fault(message); } }
Tarea concreta en la que se deberá escribir el código que realiza dicha tarea
LoadUserProfileTask.as
Código :
/** * Clase encargada de leer la configuracion del usuario */ public class LoadUserProfileTask extends IPTBaseTask { public function LoadUserProfileTask() { super(); } override protected function performTask():void { super.performTask(); // write your code after call to super class trace('LoadUserProfileTask performTask'); // this.complete(); this.fault("NO funciona masss!"); } override protected function complete():void { trace('load user complete'); // write your code before call to super class super.complete(); } override protected function fault(message:String = null):void { trace('load user fault'); // write your code before call to super class super.fault(message); } }
Espero que les sirva esta pequeña ayuda, cuando investigue las demás librerías vuelvo a escribir, slds.
Lucas
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por Freddie el 07 de Marzo de 2011
Por Creattive el 07 de Marzo de 2011
Cairngorm 3 tambien agrego librerias para manejar las vistas (mxmls) con una especie de Observers, q estan totalmente desacoplados de la vista y son bindeados por injection de Parsley, pero cuando lo pruebe y lo estudie mas en profundidad lo comento en otro tutorial, slds y gracias
Por eldervaz el 07 de Marzo de 2011
felicitaciones!