Délégation de fonction sur une cible
where = function(){ trace(this); }; f = Delegate.create(_root, where); f();
var _onRelease:Function = function(str1:String, str2:String){ trace(str1 + " " + str2); }; myButton.onRelease = Delegate.create(this, _onRelease, "hello", "world");
Initialisation
Visibilité | Return | Nom | Param 1 | Param 2 | Param 3 | Description |
---|---|---|---|---|---|---|
static public | Function | create | pTarget:Object | pFunc:Function | Création d'une fonction qui sera toujours exécuté sur une cible | |
static public | Function | createList | pTargets:Array | pFunc:Function | pArg1 | Création d'une fonction qui va exécuter une fonction donnée sur plusieurs cibles |
public | Function | createDelegate | pTarget:Object | pArg1 | Délègue la fonction à une cible et en crée une fonction |
Création
Déplacement de la class dans le package controls
Modification des méthodes create et createList, on peut maintenant passer des paramètres à la fonction appelée
/** * Délégation de fonction sur une cible * @author neolao <neo@neolao.com> * @version 1.1 (11/10/2005) * @link http://resources.neolao.com/flash/classes/controls/delegate * @license http://creativecommons.org/licenses/by-sa/2.5/ */ class com.neolao.controls.Delegate { public var className:String = "Delegate"; public var version:String = "1.1"; // ----------------------------- CONSTANTES -------------------------------- // ----------------------------- VARIABLES --------------------------------- /** * Fonction qui va être déléguée */ private var _func:Function; // ----------------------------- EVENEMENTS -------------------------------- /*============================= CONSTRUCTEUR =============================*/ /*========================================================================*/ /** * Initialisation * @param pFunc Fonction à déléguer */ public function Delegate(pFunc:Function){ _func = pFunc; } /*======================= FIN = CONSTRUCTEUR = FIN =======================*/ /*========================================================================*/ /*========================== METHODES PUBLIQUES ==========================*/ /*========================================================================*/ /** * Délègue la fonction à une cible et en crée une fonction * @param pTarget La cible * @return La nouvelle fonction */ public function createDelegate(pTarget:Object):Function{ return create(pTarget, _func); } /** * Création d'une fonction qui sera toujours exécuté sur une cible * @param pTarget La cible * @param pFunc La fonction * @param pArg1 (optional) Un paramètre pour la fonction * @return La nouvelle fonction */ public static function create(pTarget:Object, pFunc:Function, pArg1):Function{ var f = function(){ var target = arguments.callee.target; var func = arguments.callee.func; var args = arguments.callee.args.concat(arguments); return func.apply(target, args); }; f.target = arguments.shift(); // pTarget f.func = arguments.shift(); // pFunc f.args = arguments; // pArg1, pArg2, ... return f; } /** * Création d'une fonction qui va exécuter une fonction donnée sur plusieurs cibles * @param pTargets La liste des cibles * @param pFunc La fonction * @param pArg1 (optional) Un paramètre pour la fonction * @return La nouvelle fonction */ public static function createList(pTargets:Array, pFunc:Function, pArg1):Function{ var f = function(){ var targets = arguments.callee.targets; var func = arguments.callee.func; var args = arguments.callee.args.concat(arguments); for(var i=0; i<targets.length; i++){ func.apply(targets[i], args); } return true; }; f.targets = arguments.shift(); // pTargets f.func = arguments.shift(); // pFunc f.args = arguments; // pArg1, pArg2, ... return f; } /*==================== FIN = METHODES PUBLIQUES = FIN ====================*/ /*========================================================================*/ }