Я дуже новачок у гнучкості і маю проблеми із захопленням події зміни тексту мого текстового елемента керування:
<mx:Text id="description"
text=""
textAlign="center"
fontSize="18"
click="_playSpeech()" />
це клацання прямо зараз, але мені потрібно, щоб це було щось на зразок textChange = "_ playSpeech ()", тому він викликає цю функцію щоразу, коли змінюється текст цього елемента керування.
Будь-яка допомога високо цінується.
Відповіді:
1 для відповіді № 1Якщо ви спостерігаєте за змінами, які користувач вводить у самому текстовому полі, вам слід використовувати клас TextArea або TextInput замість Текст. Це дозволяє прослуховувати такі зміни:
<?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>
Якщо ви змінюєте текст поза текстовим полем, я рекомендую вам створити прив'язувану змінну або функцію, яка ініціює дію, яку ви хочете здійснити.
1 для відповіді № 2
Ви захочете зареєструватися у події зміни приблизно так (Зверніть увагу, я використовую TextInput, а не Text):
<mx:TextInput id="description" text="" fontSize="18" change="_playSpeach()"/>
1 для відповіді № 3
Найпростіший спосіб зробити це в коді - обернути оновлення тексту у функцію:
protected function updateDescription(text:String):void
{
description.text=text;
_playSearch();
}
а потім завжди викликати функцію замість того, щоб негайно змінювати текстове поле. Також запобігає непотрібне використання подій.