Au fait, pour faire le bouton qui permet de tout afficher, je suis obliger de refaire une fonction click, puisque je ne peux pas rajouter une lettre ou un nombre à l'ancienne fonction !
C'est cela ?![]()
Céd.
Au fait, pour faire le bouton qui permet de tout afficher, je suis obliger de refaire une fonction click, puisque je ne peux pas rajouter une lettre ou un nombre à l'ancienne fonction !
C'est cela ?![]()
Céd.
Tout à fait
Si tu veux utiliser une autre fonction de rappel de l'événement que la fonction click des autres boutons tu peux utiliser la classe mx.utils.Delegate :
Cette classe est apparue dans Flashmx2004 7.2....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 import mx.utils.Delegate ; var action = function (ev) { trace (this + " >> " + ev.type + " : " + ev.target) ; } monBouton.addEventListener("click", Delegate.create(this, action)) ;
Elle permet de déléguer à une autre fonction un événement par exemple ... et de choisir en + le scope dans la fonction (cad ce que va renvoyer le this....)
EKA+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 var f:Function = Delegate.create( scope , function ) :![]()
Salut Eka+
Cette fonction me permet de cloner ma fonction click en lui rajoutant des nouveaux paramètres ? Je vois pas en fait comment cela va modifier le fait que lorsque le bouton est cliquer la liste complète des sociétés est appliquer dans le datagrid !
Qu'est ce que ce scope ?
Merci !
Céd.![]()
je te le dis... quand tu as une fonction attachée à un objet dedans le this correspond à l'objet auquel elle est attachée par défaut...
Donc le scope c'est bt dans l'exemple au dessus... maintenant si je veux controller le scope. et avoir dans le this un autre objet (celui que je veux...) et bien là je peux utiliser Delegate !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 bt.onPress = function () { trace(this) ; // ici this correspond à _level0.bt }
Ici la fonction create va me créer un Function qui aura pour valeur la valeur de la fonction action mais en + ... le scope dedans ne sera pas _level0 ou _level0.bt mais o ! Dans ton panneau de trace avec la méthode toString tu vas avoir "myObject" quand tu vas presser sur le bouton.. et pas _level0.bt ....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 import mx.utils.Delegate ; var o = {} ; o.toString = function () { return "myObject" } ; var action = function () { trace (this) ; } bt.onPress = Delegate.create(o , action) ;
Du coup tu peux cibler aussi l'évément d'un composant de type EventDispatcher sur un écouteur n'importe lequel (un listener!) et vu qu'une fonction c'est un objet... tu peux cibler directement comme écouteur de l'événement une fonction qui en + aura le scope que tu désires... pratique
EKA+![]()
OKi, don je peux, a priori, arrêtes moi si je me trompes, copier la fonciton onLoad pour donner la même valeur et ainsi afficher toutes les sociétés ?
Je crois que je me suis embrouiller avec tous les termes que tu m'as donné !![]()
Cédric.
Euh ... oui tu peux mais si j'étais toi je ferais autrement alors...
Voilà
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 import mx.utils.Delegate ; var x = new XML() ; x.ignoreWhite = true ; this.checkXML = function (success) { if (success) { trace (x) ; // ici traitement sur le xml : x } else { trace ("error") ; } } // ici je faire une délégation sur la fonction checkXML de l'événement onLoad x.onLoad = Delegate.create(this, this.checkXML) ; x.load(url) ; // url l'url de ton xml // .. plus loin bt.addEventListener("click", Delegate.create(this, checkXML)) ;Tu utilises la même méthode pour le onLoad et le composant Button... et tu n'utilises pas le scope this directement... mais tu utilises la variable x dans checkXML pour parcourir ton xml et le parser dans ton tableau ! ... quand on utilise une variable déclarée en dehors d'une fonction on dit qu'on travaille avec une "portée de variable"
EKA+![]()
lors, j'ai tester ta méthode:
Et là, à la compilation, il me fait rien du tout, et me load rien dans le datagrid. Par contre, lorsque je clique sur le bouton a,b,c, etc... ça marche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 var x = new XML(); //création de l'objet XML x.ignoreWhite=true; //ignorer les sauts de ligne this.checkXML = function(success) { if (!success) { trace ("error !") ; return ; } var data2:Array = new Array(); // création du tableau data var node:Array = this.firstChild.childNodes ; // création du tableau ayant les noeuds var l:Number = node.length ; // longeur des noeuds du fichier xml for (var i = 0; i < l ; i++) { var cur = node[i] ; // cur est la valeur courante de i if (cur.nodeName == "partenaire") { var subNode:Array = cur.childNodes ; var item = {} ; item.index = cur.attributes.index ; var k:Number = subNode.length ; for (var j:Number = 0 ; j<k ; j++) { cur = subNode[j] ; item[cur.nodeName] = cur.firstChild.nodeValue ; } data2.push(item); } } grid.dataProvider = data2 ; // injecter les données dans le modèle du tableau grid.sortItemsBy("raison") ; // tu peux trier ton tableau directement } x.onLoad = Delegate.create(this, this.checkXML); x.load("partenaire.xml"); bt_liste.addEventListener("click", Delegate.create(this, checkXML));
Peut etre ais-je mal appliquer ta méthode, mais j'ai déroulé l'algorithme, et ça devrais etre bon quand même.![]()
Cédric.![]()
je t'ai dit d'utiliser x (la variable) et pas this dans la fonction.. lis ce que j'écris, on dirait que tu fais un simple copié collé de ce que je te donne comme code et que tu prend pas le temps de lire ce qui est important :Envoyé par ekameleon
tu as laissé le this.firstChild.childNodes au début de la fonction au lieu de mettre x.firstchild....
Forcément si tu lis pas mieux cela marche pas
EKA+![]()
Tu es trop bon !![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Tu pratiques flash (enfin plutot l'actionscript) depuis combien de temps ?
Cédric.
je développe sérieusement en AS depuis 5 ans je dirais...Même si je connais flash depuis + longtemps.
Oki :d
Tu sais quoi, grâce à toi, je me suis poussé à chercher et à fouiller dans le dico flash, et j'ai trouvé de part moi même et juste avec le dico lafonction pour écrire dans le presse papier (bon, je sais, c'est nul, amis bon)
Par contre, lorsque je veux la mettre en place, y'a un soucie :
Voici mon code :
Ce code est sur le bouton de l'appli.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 on(release) { var raison = ta_raison.text; trace(raison); var presse = System.setClipboard("yop " + raison + " end"); trace(presse); }
Il me sors un truc : "yop undefined end" dans le presse papier !
Pourquoi il ne me met pas l'intégralité du texte de du textarea raison = "ta_raison" ?
Cédric.
Hello
1 - tu as du le comprendre mais il faut pas utiliser de on(...) mais des événements de bouton sur les Clips ou les Buttons directement sur le scénario....
2 - le trace dans ta fonction release... sur raison il renvoi quoi ?
3 - Dans l'aide de flash :
le Void à la fin de la déclaration de la fonction signifie que la fonction ne renvoi rien.. donc cela n'a aucun sens de taper :setClipboard (System.setClipboard method)
public static setClipboard(text:String) : Void
Vu que dans tous les cas setClipboard ne renvoie rien ! c'est dans l'aide en lisant correctement l'explication.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2var presse = .....
Pour le reste... fait un exemple en fla et montre.
PS : si ta question découle d'une autre question que celle d'origine ... pense à faire un nouveau POST avec un titre explicite pour que les gens qui cherchent une info et qui passent derrière ne se perdent pas dans les méandres de ce post ...
EKA+![]()
Les méandres de ce post!
PTDR !
OKi, je fais un .fla d'exemple et je fais unn nouveau topic ! Je me celui là en résolu
Cédric.
Partager