1

이벤트와 함께 전달해야하는 매개 변수가 있습니다. 클래스를 확장하여 유형에 배치하려는 시도가 실패한 후에도 맞춤 이벤트를 작성하기 위해 다른 SO 질문에 조언을 받았습니다.Flex/AS3의 이벤트에 속성 추가

이전에 사용해 보았지만 FileReference에 일반적인 Event.COMPLETE 이벤트가있는 다른 매개 변수를 보내려고하기 때문에 보낼 방법을 알 수 없습니다. 나는 Event.COMPLETE 화재를 일으킬 수 없어 내 이벤트를 파견 할 수 없다. 왜냐하면 같은 보트에있을 것이기 때문이다. 필요한 매개 변수가 초기 Event.COMPLETE 개체에 없으므로 새 이벤트 전달을 전달할 수 없다. 그 매개 변수는 실제로 작업을 수행하는 코드에 있습니다.

이 모든 도움은 크게 감사하니 심하게 필요합니다. 감사.

기본적으로 Event.COMPLETE 기능을 그대로 교체해야합니다. 추가 속성을 보유 할 이벤트가 필요합니다. 이 일을 할 수있는 방법이 있다고 말해주세요.

답변

0

일부 코드를 게시하여 어떻게 접근하고 있는지 볼 수 있습니까?

그러나 사용자 지정 이벤트를 만들고 사용하는 경우 flex live docs을 읽는 것이 좋습니다.

Here은 간단한 사용자 지정 이벤트 기반 응용 프로그램입니다. 소스를 살펴보면 찾고있는 것일 수 있습니다.

2

저는 전문가는 아니지만 다음 내용이 저에게 효과적입니다. (무고한 사람들을 보호하기 위해 이름이 바뀌었다.) 여기

내 사용자 정의 이벤트 중 하나입니다

import flash.events.Event; 
public class SomethingHappenedEvent extends Event { 
    public static const SOMETHING_COMPLETE:String = "PictureTakenComplete"; 
    public var passedValue:int; 

    public function SomethingHappenedEvent(i:int) { 
     passedValue = i; 
     super(SOMETHING_COMPLETE);  
    } 
} 

내 사용자 정의 이벤트를 수신하도록 설정 리스너를 가지고있다. 사용자 지정 이벤트가 발생하면 내 doSomething() 함수가 실행됩니다. doSomething() 기능 내부

mySecret.addEventListener(SomethingHappenedEvent.SOMETHING_COMPLETE,doSomething); 

내가 이벤트의 passedValue 매개 변수에 액세스 할 수 있습니다 : 마지막으로

private function doSomething(e:SomethingHappenedEvent):void { 
    trace("did something: " + e.passedValue); 
} 

을, 여기에 내가 전달, 코드의 다른 곳에서 사용자 정의 이벤트를 전달하는 방법입니다 저는 여기까지한다는 설정 방법 매개 변수 : 자동차를 파견 할 것입니다 때문에

this.dispatchEvent(new SomethingHappenedEvent(myCounter)); 
+2

이벤트를 확장하는 경우 복제 방법을 재정의해야합니다. 그렇지 않으면이 질문에서 문제가 발생합니다. http://stackoverflow.com/questions/527438/re-dispatching-event-in-flex/527461#527461 –

+0

맞아,하지만 결국에는 'dispatchEvent'라고 상상해. 귀하의 사진 촬영 기능, 또는 뭔가. FileReference에서 Event.COMPLETE를 가져와야하고, 그 시점에 실행해야 할 것이 있습니다. 나는 그 함수 내에서 생성자에 전달해야하는 속성을 가지고 있지 않기 때문에 일반'Event.COMPLETE'에서'doSomething()'의'dispatchEvent'를 호출 할 수 없습니다. 기본적으로 나는'Event.COMPLETE' 기능을 정확히 그대로 대체해야합니다. 추가 속성을 보유 할 이벤트가 필요합니다. 이 일을 할 수있는 방법이 있다고 말해주세요. – jeffcook2150

+0

그래서 작업은 다음과 같습니다. 1. FileReference로드 2. 완료시 일부 값이있는 객체를 만듭니다. 가치는 어디서 비롯된 것입니까? FileReference 전에 변수를 설정하고 함수에 전달하면됩니다. 내가 그걸 채찍질 할 수있을거야. – dustmachine

9

먼저 정상으로 Event.COMPLETE에 이벤트 리스너를 추가해야 matically 그리고 당신이 그것에 대해 할 수있는 아무것도 theres. 이 이벤트 핸들러에서 애플리케이션의 나머지 부분이 애플리케이션에 첨부 된 커스텀 프로퍼티를 청취하는 경우에도 사용자 정의 커스텀을 디스패치 할 수있다.를 heres 빠른 예 :

과 같을 것이다 처리 코드를 이벤트 :

yourObject.addEventListener(Event.COMPLETE, function(event:Event):void{ 

    var myEvt:MyEvent = new MyEvent(MyEvent.COMPLETE, myCustomProperty); 
    dispatchEvent(myEvt); 

}) 

MyEvent 클래스는 같습니다 이제 사용자 정의 이벤트 단지 같은에 대한 이벤트 리스너를 추가 할 수 있습니다

package 
{ 

    import flash.events.Event; 

    public class MyEvent extends Event 
    { 

    public static const COMPLETE:String = "MyEventComplete"; 

    var myCustomProperty:*; 

    public function MyCustomEvent(type:String, prop:*) :void 
    { 

     myCustomProperty = prop; 

     super(type); 
     // if you want your event to bubble 
     // be sure to specify : super(type, true) 
    } 

    //override clone() so your event bubbles correctly 
    public override function clone() :MyEvent { 

    return new MyEvent(this.type, this.myCustomProperty) 

    } 
    } 
} 

기타 이벤트 :

addEventListener(MyCustomEvent.COMPLETE, someFunction); 
+0

흠, 그래서 이것은 기본적으로 내가 원하는 것을 할 수 없다는 것을 의미합니다. 나는 해킹을 생각해 내야 할 것이다. 감사. – jeffcook2150

+1

글쎄, 실제로는 해킹이 아닙니다. 이것은 사용자 정의 이벤트를 작성하는 올바른 방법입니다. 해킹은'Event'가 의도하지 않은 무언가를하도록 강요합니다. – greggreg

+0

또한 사용자 정의 클래스 (Event를 수신 한 FileReference를 확장합니다.COMPLETE 및 Dispatched MyCustomEvent.COMPLETE)이 방법을 재사용 할 수 있습니다. –

2
  1. 데이터 매개 변수를 사용하여 사용자 정의 이벤트 만들기
  2. (() MyObject를 예를 들어해서 Event.COMPLETE는
  3. 가 MyAnotherObject에서 (예를 들어 다른 곳에서 당신의 MyCustomEvent을 캐치하여 addEventListener를 사용하여 그 안에 데이터와 사용자 정의 이벤트 MyCustomEvent을 파견 잡을해야 클래스)

MyCustomEvent.as

package 
{ 
import flash.events.Event; 

public class MyCustomEvent extends Event 
{ 
    public static const MY_CUSTOM_EVENT_COMPLETE:String = "myCustomEventComplete"; 

    public var data:Object; 

    // Constructor 
    public function CaretEvent(type:String, data:Object, bubbles:Boolean=false, cancelable:Boolean=false) 
    { 
    super(type, true, cancelable); 

    this.data = data; 
    } 

    // Public Methods 
    public override function clone():MyCustomEvent 
    { 
    return new MyCustomEvent(type, data, bubbles, cancelable); 
    } 
} 
} 

MyObject.as

(210)

MyAnotherObject.as 사물의 소리에서

package 
{ 
import flash.events.Event; 
import flash.events.EventDispatcher; 

public class MyAnotherObject extends EventDispatcher 
{ 
    // Constructor 
    public function MyAnotherObject() 
    { 
    addEventListener(MyCustomEvent.MY_CUSTOM_EVENT_COMPLETE, onMyCustomEventComplete) 
    } 

    // Private Methods 
    private function onMyCustomEventComplete(event:MyCustomEvent):void 
    { 
    trace(event.data); 
    } 
} 
} 
0

나는 보통 이런 걸, 아마 가장 좋은 방법을하지만,이 방법을 사용할 수 알아야 할 ...

myObj.addEventListener("creationComplete", function(e:Event):void{otherFunction(e, "another Arg")}); 
0

FileReference, Event.COMPLETE 등을 확장 할 필요가 없을 수도 있습니다. 필요한 모든 것이 다른 속성 인 경우 ... 다음 용도로 사용할 수 있습니까? 그렇지 않다면 같은 페이지에있을 수 있도록 몇 가지 코드를 보여주십시오. 작업을 수행하는 handleLoad() 기능에 추가 매개 변수 (whatelse)를 얻을 것이다

public function go():void { 
    var downloadURL:URLRequest = new URLRequest("http://example.com/big.jpg"); 
    var otherParam:String = "another param"; 
    var fileRef:FileReference = new FileReference(); 
    fileRef.addEventListener(Event.COMPLETE, function(e:Event):void { 
               handleLoad(e,otherParam); }); 
    fileRef.download(downloadURL); 
} 

public function handleLoad(e:Event,whatelse:String):void { 
    Alert.show("we just loaded " + e.target + " with param " + whatelse); 
} 

. 아니면 다운로드 할 때 추가 매개 변수가 없다고 말하고 있습니까?