AS2 : faire un "callback" dans une fonction

AS2 : faire un "callback" dans une fonction - Flash/ActionScript - Programmation

Marsh Posté le 02-02-2009 à 10:46:08    

Bonjour à tous,
 
Une petite question AS2, j'aimerai faire un "callback" dans une fonction, mais je ne sais aps comment procéder, je m'explique avec un bout de code :
 
j'aimerai faire un truc qui ressemble à ça, l'argument "callBack" serait en fait le nom de la fonction à executer lors de mon action onPress :
 
 
 

Code :
  1. function maFonction(arg1,arg2,callBack){
  2. myBtn.onPress=function(){
  3. callBack();
  4. }
  5. }
  6. maFonction(""monArg1","monArg2","maFonctionCallBack" );
  7. function maFonctionCallBack(){
  8. trace("mon call back a fonctionné !" )
  9. }


 
 
voila le fameux callBack(); ne suffit pas... je ne sais pas comment faire !
 
une petite idée ?
 
Merci d'avance
 
Freed

Reply

Marsh Posté le 02-02-2009 à 10:46:08   

Reply

Marsh Posté le 03-02-2009 à 04:26:06    

D'ou l'interet du typage.
Si tu avais ecris ta fonction ainsi :
function maFonction(arg1:String, arg2:String, callBack:Function){
 
Il t'aurai renvoyé (dans les dents) "Type mismatch."
 
Dans les arguments que tu donnes, le dernier est une chaine alors que ca devrait etre ta fonction. Donc t'enleves les guillemets et c'est bon ...


---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 09-02-2009 à 14:29:00    

merci pour l'info, en fait je crois que c t effectivement les guillemets qui genaient :) merci !

Reply

Marsh Posté le 12-02-2009 à 16:09:48    

Zedlefou a écrit :

D'ou l'interet du typage.
Si tu avais ecris ta fonction ainsi :
function maFonction(arg1:String, arg2:String, callBack:Function){
 
Il t'aurai renvoyé (dans les dents) "Type mismatch."
 
Dans les arguments que tu donnes, le dernier est une chaine alors que ca devrait etre ta fonction. Donc t'enleves les guillemets et c'est bon ...


 
 
voila je déterre ce topic, car je suis confronté à un autre souci... je m'explique :
 
dans mon XML j'ai ça :

Code :
  1. <fieldset group="">
  2. <field type="select" name="nb_enfants" value="<?= $_SESSION['recherche_vacances']['nb_enfants'] ?>" default=""  width="55" height="200" callback="selectChildren" >
  3.  <option value="1" alt=""><![CDATA[1]]></option>
  4.  <option value="2" alt=""><![CDATA[2]]></option>
  5.  <option value="3" alt=""><![CDATA[3]]></option>
  6.  <option value="4" alt=""><![CDATA[4]]></option>
  7.  <option value="5" alt=""><![CDATA[5]]></option>
  8.  <option value="6" alt=""><![CDATA[6]]></option>
  9.  <option value="7" alt=""><![CDATA[7]]></option>
  10.  <option value="8" alt=""><![CDATA[8]]></option>
  11.  <option value="9" alt=""><![CDATA[9]]></option>
  12.  <option value="10" alt=""><![CDATA[10]]></option>
  13.  <option value="11" alt=""><![CDATA[+10]]></option>
  14. </field>
  15. </fieldset>


 
dans mon AS2 j'ai fait ça :
 
 
(parser mon XML )

Code :
  1. for(i=0;i<configNodes.length;i++){
  2.   var nodes=configNodes[i].firstChild
  3.   trace("name : "+nodes.attributes.name+" type : "+nodes.attributes.type);
  4.   if(nodes.attributes.type=="select" ){
  5.    var values:Array=new Array();
  6.    var libelle:Array=new Array();
  7.    var alt:Array=new Array();
  8.    var value=nodes.attributes.value;
  9.    var object:MovieClip=_root[nodes.attributes.name];
  10.    var width:Number=nodes.attributes.width;
  11.    var height:Number=nodes.attributes.height;
  12.    var fieldsNode=nodes.childNodes;
  13.    var callBack:Function=nodes.attributes.callback;
  14.    trace("callBack : "+callBack)
  15.    for(n=0;n<fieldsNode.length;n++){
  16.     values.push(fieldsNode[n].attributes.value);
  17.     alt.push(fieldsNode[n].attributes.alt);
  18.     libelle.push(fieldsNode[n].firstChild.nodeValue);
  19.    }
  20.    createSelect(object,libelle,values,"Choisissez...",value,'',width,height,alt,callBack);
  21.   }


 
fonction :
 

Code :
  1. function createSelect(mc:MovieClip, libelle:Array, values:Array, emptyValue:String, defaultValue:String, selectedValue:String, width:Number, height:Number,infos:Array,callBack:Function) {
  2. [...]
  3. callBack(this.value.length);
  4. trace("callback ? =>"+callBack);
  5. [...]
  6. }
  7. function selectChildren(lenght){
  8. trace(toto);
  9. }


 
 
Donc voila.. ça ne marche pas.. pourtant mon trace("callback ? =>"+callBack) me retourne bien "callback ? => selectChildren" mais la fonction selectChildren n'est pas executée... sauf si je le mets à la main sans guillemets comme ça :
 
createSelect(object,libelle,values,"Choisissez...",value,'',width,height,alt,selectChildren);
 
 
Que faire ?
 
PS :  je viens d'essayer de mettre dans mon XML  callback="asfunction:selectChildren"  ... mais ça ne marche pas :(
 
Freed


Message édité par freed102 le 12-02-2009 à 16:18:48
Reply

Marsh Posté le 12-02-2009 à 16:44:31    

D'après moi, ce qui pourrait déconner, c'est ceci

Code :
  1. var callBack:Function=nodes.attributes.callback;


 
nodes.attributes.callback est un string ... que tu tentes d'assigner à une variable de type Function ...  
 
Quand tu tapes la ligne createSelect() à la main, tu passes bien directement le pointeur vers la fonction selectChildren() .. et du coup, ça fonctionne.
 
Essaye ceci:

Code :
  1. var callBack:Function=eval(nodes.attributes.callback);


Reply

Marsh Posté le 12-02-2009 à 16:52:56    

Mr Mala a écrit :

D'après moi, ce qui pourrait déconner, c'est ceci

Code :
  1. var callBack:Function=nodes.attributes.callback;


 
nodes.attributes.callback est un string ... que tu tentes d'assigner à une variable de type Function ...  
 
Quand tu tapes la ligne createSelect() à la main, tu passes bien directement le pointeur vers la fonction selectChildren() .. et du coup, ça fonctionne.
 
Essaye ceci:

Code :
  1. var callBack:Function=eval(nodes.attributes.callback);




 
 
Génial Missieu Mala !! ça marche !!!
 
je ne connaissais pas vraiment l'utilité de cette fonction "eval"... il va falloir que je me penche un peu plus dessus

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed