La classe eka.src.util.AsfunctionProxy

/* ----------------
 
	Name : AsfunctionProxy
	Package : eka.src.util
	Version : 1.0.0.0
	Date :  2005-09-11
	Author : ekameleon
	URL : http://www.ekameleon.net
	Mail : contact@ekameleon.net
 
	COPYRIGHT
 
		Cette création est mise à disposition selon le Contrat Paternité 
 
		- Pas d'Utilisation Commerciale 
		- Partage des Conditions Initiales à l'Identique disponible en ligne 
 
			http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ 
 
		ou par courrier postal à Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
 
 
----------------*/
 
import eka.src.commands.Command ;
import eka.src.events.Proxy ;
 
class eka.src.util.AsfunctionProxy implements Command {
 
	// ----o Author Properties
 
	public static var className:String = "AsfunctionProxy" ;
	public static var classPackage:String = "eka.src.util" ;
	public static var version:String = "1.0.0.0" ;
	public static var author:String = "ekameleon" ;
	public static var link:String = "http://www.ekameleon.net" ;
 
	// ----o Constructor
 
	public function AsfunctionProxy( tf:TextField, fname:String, o , f:Function ) {
		_tf = tf ;
		_o = o ;
		_f = f ;
		name = fname || "callFunction"  ;
		execute() ;
	}
 
	// ----o Public properties
 
	public var name:String ;
 
	// ----o Public Methods
 
	public function execute():Void {
		if (_tf == undefined) return ;
		var o = _o || _tf ;
		var f:Function = _f || o[name] ;
		_tf._parent[name] = Proxy.create(o, f) ;
	}
 
	// ----o Virtual Properties
 
	public function get field():TextField { return getField() }
	public function set field(tf:TextField):Void { setField(tf) }
 
	public function get func():Function { return getFunction() }
	public function set func(f:Function):Void { setFunction(f) }
 
	public function get target():TextField { return getTarget() }
	public function set target(o):Void { setTarget(o) }
 
	// ----o Getter/Setter Methods
 
	public function getField():TextField {
		return _tf ;
	}
 
	public function getFunction():Function {
		return _f ;
	}
 
	public function getTarget() {
		return _o ;
	}
 
	public function setField(tf:TextField):Void {
		_tf = tf ;
		execute() ;		
	}
 
	public function setFunction(f:Function):Void {
		_f = f ;
		execute() ;
	}
 
	public function setTarget(o):Void {
		_o = o ;
		execute() ;
	}
 
	public function toString():String {
		return "[AsfunctionProxy]" ;
	}
 
	// ----o Private Properties
 
	private var _tf:TextField ;
	private var _f:Function ;
	private var _o ;
 
}

Description

Permet de régler le scope de la fonction invoqué par un asfunction sur un champ de texte dynamique. Par défaut il faut utiliser un asfunction ayant pour nom de méthode "callFunction" :

<a href='asfunction:callFunction,argument1,argument2'><u>small example here</a>

Utilisation

var proxy:AsfunctionProxy = new AsfunctionProxy(field, fname, obj, func) ;

Paramètres

  • field : champ de texte qui va utiliser un asfunction..
  • obj : objet recevant le scope de la commande asfunction .
  • func : fonction invoquée lors de la sélection du lien hypertexte paramétré par le asfunction.

Propriétés

  • name : Nom de la fonction à utiliser dans le asfunction. Cette chaine de caractère défini également le nom de la fonction par défaut utilisée si la propriété func n'est pas définie. (Par défault cette propriété vaut "callFunction")
  • field [Read/Write] : Permet de définir le champ de texte que l'on souhaite configurer pour l'utilisation d'un asfunction.
  • target [Read/Write] : Permet de définir l'objet servant de cible pour le scope du asfunction.
  • func [Read/Write] : Permet de définir la fonction (instruction) à utiliser lors de l'utilisation du asfunction.

Remarque : Pour tout changement de la propriété name il ne faut pas oublier de relancer le proxy sur le champ de texte avec la méthode execute()

Methodes

  • execute() : Initialise le proxy du asfunction sur le champ de texte défini.
  • getField() : renvoi la valeur du champ de texte.

  • getFunction() : renvoi la valeur de la fonction.
  • getTarget() : renvoi la valeur de l'objet servant de scope.
  • setField(tf:TextField) : permet de définir le champ de texte.

  • setFunction(f:Function) : permet de définir l'objet servant de cible pour le scope du asfunction.

  • setTarget(o) : permet de définir la fonction (instruction) à utiliser lors de l'utilisation du asfunction.

Exemple

import eka.src.util.* ;
 
var p = {
	fontFamily : "verdana" ,
	color : "#FFFFFF" ,
	fontSize : "12px" ,
	maginLeft : "4px" ,
	maginRight : "3px"
}
var a = {
	color : "#F3F372",
	fontWeight : "bold"
}
var css:TextField.StyleSheet = new TextField.StyleSheet ;
css.setStyle("p", p) ;
css.setStyle("a", a) ;
 
var o = {} ;
o.toString = function () { return "[my object]" }
o.myFunction = function () {
	trace (this + " >> " + arguments) ;
}
 
var txt:String = "" ;
txt += "<p>1 <a href='asfunction:callFunction,argument1,argument2'>- default example</a></p>";
txt += "<p>2 <a href='asfunction:customCall,argument1,argument2'>- custom call name & proxy</a></p>";
 
createTextField("field", 1, 25, 25, 500, 80) ;
field.multiline = true ;
field.wordWrap = true ;
field.styleSheet = css ;
field.html = true ;
field.htmlText = txt ;
field.callFunction = function () {
	trace (this + " >> " + arguments) ;
}
 
var proxy1 = new AsfunctionProxy(field) ; // default
var proxy2 = new AsfunctionProxy(field, "customCall", o, o.myFunction) ; // custom function's name & scope

A noter que j'utilise un Pattern Command et une classe de proxy dans mon code ci-dessus, je vais vous posez rapidement l'interface et la classe que j'utilise à la fin de cet article (vous pouvez retrouver une partie de mon frameworks sur le wiki de mediabox en attendant que je mette à jour mon site).

Interface eka.src.commands.Command

/* ---------- interface Command
 
	Name : Command
	Package : eka.src.commands.Command
	Version : 1.0.0.0
	Date :  2004-12-21
	Author : ekameleon
	URL : http://www.ekameleon.net
	Mail : contact@ekameleon.net
 
	THKS : Francis Bourre - www.tweenpix.net
	for Design Pattern Command concept : http://www.tweenpix.net/archives/000423.html
 
	COPYRIGHT
 
		Cette création est mise à disposition selon le Contrat Paternité 
 
		- Pas d'Utilisation Commerciale 
		- Partage des Conditions Initiales à l'Identique disponible en ligne 
 
			http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ 
 
		ou par courrier postal à Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
 
 
----------  */
 
interface eka.src.commands.Command {
 
	function execute():Void ;
 
}

Classe eka.src.events.Proxy

Classe équivalente à la classe mx.utils.Delegate de macromedia avec possibilité de passer des arguments supplémentaires lors de la création de la fonction.

/* ---------- Proxy
 
	Name : Proxy
	Package : eka.src.events
	Version : 1.0.0.1
	Date :  2005-04-18
	Author : ekameleon
	URL : http://www.ekameleon.net
	Mail : contact@ekameleon.net
 
	COPYRIGHT
 
		Cette création est mise à disposition selon le Contrat Paternité 
 
		- Pas d'Utilisation Commerciale 
		- Partage des Conditions Initiales à l'Identique disponible en ligne 
 
			http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ 
 
		ou par courrier postal à Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
 
 
----------  */
 
class eka.src.events.Proxy {
 
	// ----o Author Properties
 
	public static var className:String = "Proxy" ;
	public static var classPackage:String= "eka.src.events";
	public static var version:String= "1.0.0.1";
	public static var author:String= "ekameleon";
	public static var link:String= "http://www.ekameleon.net" ;
 
	// ----o Static Methods
 
	public static function create(o, f:Function):Function {
		var a:Array = arguments.slice(2) ;
		return function():Void {
			f.apply(o, arguments.concat(a));
		}
	}
 
}