Apache flex 从验证器分派自定义事件
我有一个对某人来说应该是相当简单的问题。基本上,我正在尝试创建一个字符串验证器,该验证器通过在创建时调度一个事件,从其控制器请求一种新语言 下面的示例是Flex3组件资源管理器的直接副本-唯一的区别是我创建了一个自定义组件,它在创建时发送事件 问题是我的主应用程序无法听到事件被调度,我不知道为什么 这是一个例子 MyValidator.asApache flex 从验证器分派自定义事件,apache-flex,events,validation,Apache Flex,Events,Validation,我有一个对某人来说应该是相当简单的问题。基本上,我正在尝试创建一个字符串验证器,该验证器通过在创建时调度一个事件,从其控制器请求一种新语言 下面的示例是Flex3组件资源管理器的直接副本-唯一的区别是我创建了一个自定义组件,它在创建时发送事件 问题是我的主应用程序无法听到事件被调度,我不知道为什么 这是一个例子 MyValidator.as package components { import flash.events.Event; import mx.val
package components
{
import flash.events.Event;
import mx.validators.StringValidator;
/**
* ...
* @author Beaker
*/
public class MyValidator extends StringValidator
{
public function MyValidator()
{
trace(">>MyValidator:MyValidator--")
var _event:Event = new Event("getLanguage", true)
dispatchEvent(_event)
}
}
}
Main.MXML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:comp="components.*" creationComplete="onComplete(event)">
<mx:Script>
<![CDATA[
import flash.events.Event;
import mx.controls.Alert;
protected function onComplete(evt:Event):void
{
trace(">>Main:onComplete--")
systemManager.addEventListener("getLanguage",onTest)
}
protected function onTest(evt:Event):void
{
trace(">>Main:onTest--")
Alert.show("getLanguage");
}
]]>
</mx:Script>
<comp:MyValidator source="{fname}"
property="text"
tooShortError="This string is shorter than the minimum allowed length of 4. "
tooLongError="This string is longer than the maximum allowed length of 20."
minLength="4" maxLength="20"
trigger="{myButton}" triggerEvent="click"
valid="Alert.show('Validation Succeeded!');"/>
<mx:Panel title="StringValidator Example" width="75%" height="75%"
paddingTop="10" paddingLeft="10" paddingRight="10" paddingBottom="10">
<mx:Form>
<mx:FormItem label="Enter a name between 4 and 20 characters: ">
<mx:TextInput id="fname" width="100%"/>
</mx:FormItem>
<mx:FormItem >
<mx:Button id="myButton" label="Validate" />
</mx:FormItem>
</mx:Form>
</mx:Panel>
</mx:Application>
如果显示不正确,请原谅格式错误 您的
MyValidator
不是DisplayObject
,因此它的事件不会冒泡。您应该将侦听器直接添加到MyValidator
实例
变体#1:
变体2:
在MyValidator.as中,在类声明之前添加以下元数据:
[Event(name="getLanguage", type="flash.events.Event")]
使用方法:
<comp:MyValidator source="{fname}"
property="text"
getLanguage="onTest(event)"
tooShortError="This string is shorter than the minimum allowed length of 4. "
tooLongError="This string is longer than the maximum allowed length of 20."
minLength="4" maxLength="20"
trigger="{myButton}" triggerEvent="click"
valid="Alert.show('Validation Succeeded!');"/>
@bicker,这里有什么问题吗?非常感谢您的回复,但仍然不太正确。。。MyValidator.as无法使用您提到的元数据标记,因此我尝试了两种方法。首先,我尝试将下面的代码添加到MyValidator.as:[元数据][事件(name=“getLanguage”,type=“flash.events.Event”)]没有乐趣,然后我尝试将MyValidator.as转换为mxml。[Event(name=“getLanguage”,type=“flash.events.Event”)]没有,我错误地实现了它?很抱歉格式化-很难在500分钟内响应chars@Beaker对不起,是我的错。我没有注意到,您的验证器是纯组件。您不需要添加“[元数据]”。所以,只需在类声明之前添加[Event(name=“getLanguage”,type=“flash.events.Event”)],它就可以工作了。嗨,Timofei,(你是以Lanzarote火山命名的吗?)我已经尝试过了,但仍然没有乐趣…:(在我的主应用程序中,我有以下..protected function onInit(evt:Event):void{trace(“>>main:onInit-->”)validator.addEventListener(“getLanguage”,onTest);}并且我已经将[Event(name=“getLanguage”,type=“flash.events.Event”)]添加到as3类中。在实例化该类时,我是否需要分派任何内容?
[Event(name="getLanguage", type="flash.events.Event")]
<comp:MyValidator source="{fname}"
property="text"
getLanguage="onTest(event)"
tooShortError="This string is shorter than the minimum allowed length of 4. "
tooLongError="This string is longer than the maximum allowed length of 20."
minLength="4" maxLength="20"
trigger="{myButton}" triggerEvent="click"
valid="Alert.show('Validation Succeeded!');"/>