有關在自定義事件中重寫克隆方法的問題非常流行,它似乎是Flex奇怪的事情之一。你可以閱讀關於它here。
所以你必須重寫這個方法,只有在這個方法中你可以定義自定義屬性的值。該方法並不常見,所以如果您嘗試調試它,您將永遠不會在其正文中獲得調試器。
如果您嘗試在構造函數中定義自定義屬性的值,則該值將被忽略。
使用常量字符串作爲事件的類型值可能不現實。在這種情況下,您的RequestEvent的所有實例都是相同類型的,並且您不能在不同情況下告訴它們appart。正如你在下面的例子中看到的,這個字符串在動作偵聽器中用來映射偵聽器函數。
在這個例子中,我有三個不同的事件按鈕 - 正常的事件,我的版本的RequestEvent和你的版本。看看它,我希望它可以幫助理解這種情況。
//應用
<fx:Script>
<![CDATA[
import fld02.com.customevent.RequestEvent;
import fld02.com.customevent.RequestEvent2;
import mx.controls.Alert;
private function onCustomGroupBtn2Clicked(evt:RequestEvent):void
{
Alert.show('Btn2Clicked: results = ' + evt.results.toString(), 'This is RequestEvent');
}
private function onCustomGroupBtn3Clicked(evt:RequestEvent2):void
{
Alert.show('Btn3Clicked: Results = ' + evt.Results.toString(), 'This is your RequestEvent');
}
]]>
</fx:Script>
<customevent:CustomGroup
BUTTON1_CLICKED="{Alert.show('Btn1Clicked', 'This is Event')}"
BUTTON2_CLICKED="onCustomGroupBtn2Clicked(event)"
request="onCustomGroupBtn3Clicked(event)"/>
</s:Application>
// CustomGroup
<?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="346" height="144">
<fx:Metadata>
[Event(name="BUTTON1_CLICKED", type="flash.events.Event")]
[Event(name="BUTTON2_CLICKED", type="fld02.com.customevent.RequestEvent")]
[Event(name="request", type="fld02.com.customevent.RequestEvent2")]
</fx:Metadata>
<fx:Script>
<![CDATA[
private function onBtn1Click():void
{
this.dispatchEvent(new Event("BUTTON1_CLICKED"));
}
private function onBtn2Click():void
{
var requestEvent:RequestEvent = new RequestEvent("BUTTON2_CLICKED");
requestEvent.results = true;
this.dispatchEvent(requestEvent);
}
]]>
</fx:Script>
<s:Button x="43" y="31" width="183" label="Generate Event" click="onBtn1Click()"/>
<s:Button x="43" y="62" width="183" label="Generate RequestEvent" click="onBtn2Click()"/>
<s:Button x="43" y="93" width="183" label="Generate Your RequestEvent" click="{this.dispatchEvent(new RequestEvent2(true))}"/>
</s:Group>
//我RequestEvent
package fld02.com.customevent
{
import flash.events.Event;
public class RequestEvent extends Event
{
private var _results:Boolean;
public function RequestEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
override public function clone():Event
{
var requestEvent:RequestEvent = new RequestEvent(this.type);
requestEvent.results = this.results;
return requestEvent;
}
public function get results():Boolean
{
return _results;
}
public function set results(value:Boolean):void
{
_results = value;
}
}
}
//你的RequestEvent
package fld02.com.customevent
{
import flash.events.Event;
public class RequestEvent2 extends Event
{
public static const REQUEST:String = "request";
public function RequestEvent2(Results:Boolean=false)
{
super(REQUEST);
Results = Results;
}
private var _Results:Boolean;
public function get Results():Boolean
{
return _Results;
}
override public function clone():Event
{
return new RequestEvent2(Results);
}
}
}
感謝好友我m新的flex代碼在編碼............我是新的編程世界可以指導我如何開始在flex? – ricky 2013-02-14 20:15:49
tv.adobe.com上有很多優秀的視頻教程 - 根據我的經驗,Flex是最簡單,最簡單的RIA平臺。查看Adobe提供的一些入門指南。他們是那裏最好的。問候 – user2073306 2013-02-14 21:58:15
謝謝我已經通過視頻,但仍然在努力與一些代碼。 – ricky 2013-02-15 05:19:59