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!