com.neolao.controls.Delegate

Délégation de fonction sur une cible

Exemples

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");

Constructeur

Initialisation

  • pFunc:Function La fonction à déléguer

Méthodes

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

Change log

[06/01/2005] Version 1.0

Création

[20/09/2005] Version 1.0

Déplacement de la class dans le package controls

[11/10/2005] Version 1.1

Modification des méthodes create et createList, on peut maintenant passer des paramètres à la fonction appelée

Source

/**
 * 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 ====================*/
	/*========================================================================*/
}