Utilización de la clase Delegate

La clase Delegate permite ejecutar una función en un ámbito específico. Esta clase se proporciona para que se pueda distribuir el mismo evento en dos funciones diferentes (consulte Utilización de componentes ActionScript 2.0) y para que se pueda llamar a las funciones dentro del ámbito de la clase que las contiene.

Cuando se pasa una función como un parámetro a EventDispatcher.addEventListener(), la función se invoca en el ámbito de la instancia del componente difusor, no del objeto en el que está declarada (consulte Utilización de componentes ActionScript 2.0). Se puede utilizar Delegate.create() para llamar a la función del ámbito del objeto que declara.

El siguiente ejemplo muestra los tres métodos de detección para eventos para una instancia de componente Button. Las formas de añadir detectores de eventos a una instancia de componente Button tienen como resultado que el evento se distribuya en un ámbito diferente.

Para utilizar la clase Delegate para detectar eventos:

  1. Cree un nuevo documento de Flash y guárdelo como delegate.fla.
  2. Arrastre un componente Button desde la carpeta User Interface del panel Componentes a la biblioteca.

    Añadirá y colocará la instancia de botón en el escenario mediante el código ActionScript en un paso posterior.

  3. Añada el siguiente código ActionScript al fotograma 1 de la línea de tiempo principal:
    import mx.controls.Button;
    import mx.utils.Delegate;
    
    function clickHandler(eventObj:Object):Void {
        trace("[" + eventObj.type + "] event on " + eventObj.target + " instance.");
        trace("\t this -> " + this);
    }
    
    var buttonListener:Object = new Object();
    buttonListener.click = function(eventObj:Object):Void {
        trace("[" + eventObj.type + "] event on " + eventObj.target + " instance.");
        trace("\t this -> " + this);
    };
    
    this.createClassObject(Button, "one_button", 10, {label:"One"});
    one_button.move(10, 10);
    one_button.addEventListener("click", clickHandler);
    
    this.createClassObject(Button, "two_button", 20, {label:"Two"});
    two_button.move(120, 10);
    two_button.addEventListener("click", buttonListener);
    
    this.createClassObject(Button, "three_button", 30, {label:"Three"});
    three_button.move(230, 10);
    three_button.addEventListener("click", Delegate.create(this, clickHandler));
    

    El código anterior se divide en seis secciones (cada sección se separa por una línea en blanco). La primera sección importa la clase Button (para el componente Button), así como la clase Delegate. La segunda sección del código define una función a la que se llamará cuando el usuario haga clic en algunos de los botones. La tercera sección del código crea un objeto que se utiliza como un detector de eventos y el objeto detecta un único evento, click.

    Cada una de las tres secciones que faltan crea una nueva instancia de componente Button en el escenario, vuelve a colocar la instancia y añade un detector de eventos para el evento click. El primer botón añade un detector de eventos para el evento click y pasa directamente una referencia a una función de controlador click. El segundo evento añade un detector de eventos para el evento click y pasa una referencia a un objeto de detector, que contiene un controlador para el evento click. Finalmente, la tercera función añade un detector de eventos para el evento click, utiliza la clase Delegate para distribuir el evento click en el ámbito this (donde this es igual a _level0) y pasa una referencia a la función de controlador click.

  4. Seleccione Control > Probar película para probar el documento de Flash.
  5. Haga clic en cada instancia de botón en el escenario para ver el ámbito en el que se controla el evento.
    1. Haga clic en el primer botón del escenario para rastrear el siguiente texto en el panel Salida:
      [click] event on _level0.one_button instance.
      

      this -> _level0.one_button


      Al hacer clic en la instancia one_button, el ámbito this se refiere a la propia instancia de botón.

    2. Haga clic en el segundo botón del escenario para rastrear el siguiente texto en el panel Salida:
      [click] event on _level0.two_button instance.
      

      this -> [object Object]


      Al hacer clic en la instancia two_button, el ámbito this se refiere al objeto buttonListener.

    3. Haga clic en el tercer botón del escenario para rastrear el siguiente texto en el panel Salida:
      [click] event on _level0.three_button instance.
      

      this -> _level0


      Al hacer clic en la instancia three_button, el ámbito this se refiere al ámbito que especifica en la llamada de método Delegate.create() o, en este caso, _level0.


Flash CS3

 

Enviarme un mensaje de correo electrónico cuando se añadan comentarios a esta página | Informe de comentarios

Página actual: http://livedocs.adobe.com/flash/9.0_es/main/00000848.html