flex 自定义事件一个小问题

这是我定义的类packageviews{importflash.events.Event;importmx.states.OverrideBase;publicclass... 这是我定义的类
package views
{
import flash.events.Event;

import mx.states.OverrideBase;

public class Th extends Event
{
public var types:String;
public var name:String;

public function Th(name:String)
{
super(type);
this.name=name;
}
public override function clone():Event
{
return new Th(name);
}

}
}
下面是我定义的组件
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">
<s:layout>
<s:BasicLayout/>
</s:layout>

<fx:Metadata>
[Event(name="dos",type="views.Th")]
</fx:Metadata>
<fx:Script>
<![CDATA[
import views.Th;
public var gg:String;
protected function but_clickHandler(event:MouseEvent):void
{
gg=textIn.text;
var ev:Th=new Th(textIn.text);
this.dispatchEvent(ev);
}
]]>
</fx:Script>

<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->

</fx:Declarations>

<s:Button x="152" y="182" label="按钮" id="but" click="but_clickHandler(event)"/>
<s:TextInput x="125" y="93" id="textIn"/>
</s:Group>
最后是我弄的一个应用程序
<?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" xmlns:ns1="*">
<s:layout>
<s:BasicLayout/>
</s:layout>
<fx:Script>
<![CDATA[
import mx.controls.Alert;

import views.Th;
public function han(e:Th):void
{
Alert.show(e.name);
}
]]>
</fx:Script>
<ns1:thing x="203" y="115" dos="han(event)">
</ns1:thing>
</s:Application>
就是不知道为什么到最后无法运行 han函数,成功之后,另外加分
展开
 我来答
tsx718
2011-05-17 · TA获得超过1613个赞
知道小有建树答主
回答量:668
采纳率:0%
帮助的人:603万
展开全部
我个人认为是你这个事件类的问题 我做了下修改你测试一下
public class Th extends Event
{

public var name:String;

public function Th(name:String,type:String)
{
super(type);
this.name=name;
}
public override function clone():Event
{
return new Th(name,type);
}
}
你原来的东西你定义了一个type后面还带个s 结果super中是 type 变量是types,不知道这是否是其中一个错误,另外 你的type你根本没有给进去啊,你在派发的时候把内容给了name 。我表达能力不是很好,总之你试试吧 派发的时候 name 应该是你这个事件传递时需要的数据 type才是你派发的类型 随便给个字符串吧,给什么字符串 就监听什么字符串。另外我每看到你监听啊,在派发之前必须要执行过addEventListner才会生效
preason
2011-05-10 · TA获得超过126个赞
知道答主
回答量:174
采纳率:0%
帮助的人:157万
展开全部
protected function but_clickHandler(event:MouseEvent):void
{
gg=textIn.text;
var ev:Th=new Th(textIn.text,true);
this.dispatchEvent(ev);
}
注意这里事件第二个参数为true
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
彩陶娃娃_
2011-05-09 · 超过17用户采纳过TA的回答
知道答主
回答量:215
采纳率:0%
帮助的人:40.1万
展开全部
var ev:Th=new Th("dos");
this.dispatchEvent(ev);

现在你再看看?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友7bf7f7734
2011-05-16 · TA获得超过121个赞
知道小有建树答主
回答量:204
采纳率:0%
帮助的人:136万
展开全部
var ev:Th=new Th(textIn.text);
<fx:Metadata>
[Event(name="dos",type="views.Th")]
</fx:Metadata>
没有保持一至,new Th("dos")就可以了。

建议用静态变态来为事件命名。在自定义事件中添加静态变量并赋值。

public static var MyEventName:string = "MyEventName";

var ev:Th=new Th(Th.MyEventName);
<fx:Metadata>
[Event(name=Th.MyEventName,type="views.Th")]
</fx:Metadata>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式