Apache flex 从验证器分派自定义事件

Apache flex 从验证器分派自定义事件,apache-flex,events,validation,Apache Flex,Events,Validation,我有一个对某人来说应该是相当简单的问题。基本上,我正在尝试创建一个字符串验证器,该验证器通过在创建时调度一个事件,从其控制器请求一种新语言 下面的示例是Flex3组件资源管理器的直接副本-唯一的区别是我创建了一个自定义组件,它在创建时发送事件 问题是我的主应用程序无法听到事件被调度,我不知道为什么 这是一个例子 MyValidator.as package components { import flash.events.Event; import mx.val

我有一个对某人来说应该是相当简单的问题。基本上,我正在尝试创建一个字符串验证器,该验证器通过在创建时调度一个事件,从其控制器请求一种新语言

下面的示例是Flex3组件资源管理器的直接副本-唯一的区别是我创建了一个自定义组件,它在创建时发送事件

问题是我的主应用程序无法听到事件被调度,我不知道为什么

这是一个例子

MyValidator.as

        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!');"/>