2010-12-05 33 views
0

Je suis très nouveau à fléchir et ont du mal à capturer l'événement de changement de texte de mon contrôle de texte:Comment campture l'événement de changement de texte d'un contrôle de texte pour appeler une fonction dans Flex 3

<mx:Text id="description" 
      text="" 
      textAlign="center" 
      fontSize="18" 
      click="_playSpeech()" /> 

c'est un clic en ce moment mais j'ai besoin d'être quelque chose comme textChange = "_ playSpeech()" ainsi il appelle cette fonction chaque fois que le texte de ce contrôle change.

Toute aide est fortement appréciée.

Répondre

1

Si vous regardez les changements que l'utilisateur entre dans la zone de texte lui-même, vous devez utiliser la classe TextArea ou TextInput au lieu de Texte. Cela vous permet d'écouter des changements comme celui-ci:

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> 
    <fx:Script> 
     <![CDATA[ 


      protected function onTextChangeHandler(event:Event):void 
      { 
       trace("text has changed") 
      } 

     ]]> 
    </fx:Script> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 


    <mx:TextArea id="description" 
      text="text to change goes here ..." 
      textAlign="center" 
      fontSize="18" 
      change="onTextChangeHandler(event)" /> 

</s:Application> 

Si vous changez le texte en dehors de la zone de texte, je vous recommande de faire une variable peut être liée ou une fonction qui déclenche l'action que vous voulez arriver.

+0

Je les ai regardés. merci les gars mais je change le texte dynamiquement et ils ne sont pas modifiés par l'utilisateur. – XGreen

+1

Jetez un coup d'œil à [Bindable] et ChangeWatcher. Ou vous pouvez simplement faire de la source de texte une fonction de définition et envoyer le changement de cette fonction. – Mattias

+0

Des trucs géniaux. Merci beaucoup – XGreen

1

Vous souhaitez vous inscrire sur l'événement de changement comme si (Remarquez que je suis en utilisant TextInput et non Texte):

<mx:TextInput id="description" text="" fontSize="18" change="_playSpeach()"/> 
+0

C'est cool. Mais le changement ne fonctionne que si l'utilisateur change un texte mais je change le texte dynamiquement dans le code – XGreen

1

Un moyen facile de le faire dans le code est en enveloppant la mise à jour du texte dans une fonction:

 protected function updateDescription(text:String):void 
     { 
      description.text=text; 
      _playSearch(); 
     } 

puis d'appeler toujours la fonction au lieu de changer immédiatement le champ de texte. Empêche également l'utilisation inutile d'événements.