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.
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!