0

Flex의 FileReference 클래스를 확장하여 사용자 정의 속성을 포함하고자합니다. AS3에서는 이벤트 리스너를 통해 함수에 인수를 전달하지 않으므로 슬프다는 것을 느끼기 때문에이 속성을 이벤트 대상에 존재시켜야 액세스 할 수 있습니다.다른 속성을 포함하도록 Flex FileReference 클래스 확장

현명한 FileReference 객체를이 클래스에 캐스트 할 수 있기를 바랍니다. 나는 가지고있다 :

var fr:SmxFR = e.target as SmxFR 

나는 그것을 원한다; 지금은 그냥 null을 반환합니다.

빈, 새롭게 인스턴스 SmxFR 목적은 장소에 확장 속성을 가지고 있지만 상속 된 모든 속성과 목적이 내가 사용하고있는 클래스, SmxFR.as입니다 Error: Error #2037: Functions called in incorrect sequence, or earlier call was unsuccessful.

반환 :

package 
{ 
import flash.net.FileReference; 

public class SmxFR extends FileReference 
{ 
    public var housenum:String = ""; 
    public function SmxFR() 
    { 
     super(); 
    }  
} 
} 

유지가 내가 할 수있는 것처럼 간단하다. 누군가 내게 이것을 이해하도록 도와 줄 수 있습니까? 감사.


편집 : 나는 그에서 핸들 속성을 사는 얻을

var fr:SmxFR = new SmxFR(); 

을, 다른 모든 (:

의 요청에 따라

,이 상속 된 모든 객체에서 상기 오류가 발생 인스턴스화가 즉, 상속 된) 속성 throw Error #2037.


그래서, 어쩌면 내가하고 싶은는 FileReferenceList를 오버라이드 (override) 요구하는 것입니다? 원래 오브젝트를 SxmFR으로 인스턴스화해야하는 경우, 사용자가 여러 파일을 한 번에 선택할 수 있도록하기 위해 FRL을 사용하므로이 작업을 수행해야합니다. FileReference에서 내 수업에 금식 할 방법이 없다고 확신합니까?

+0

는 SmxFR 클래스로 인스턴스화 된 대상입니까? – jochil

+0

아니요, 'FileReference'로 인스턴스화되었습니다. FileReference에서 SmxFR로 쉽게 캐스팅 할 수 있기를 원합니다. – jeffcook2150

+1

SmxFR로 인스턴스화해야합니다. 모든 SmxFR 객체는 FileReferene 객체이지만 다른 방법은 아닙니다. – Amarghosh

답변

0

확장하면 FileReferenceList은 도움이되지 않습니다. FileReferenceList.browse() 메서드는 사용자가 여러 파일을 선택할 때 FileReference 개체의 배열을 만듭니다. 이는 내부적으로 발생하며 (개인 메서드에있을 수 있음) 해당 동작을 변경하고 대신 SxmFR 개체를 만들 수 없습니다. Myk가 제안한대로 사용자 정의 이벤트를 사용하십시오.


This article 사운드 객체에 대한 이야기,하지만 너무 FileReference 객체에 적용 할 수있어 할 수있다. 다시 사용할 수 없습니까? SmxFr 클래스를 사용하는 곳에 코드를 게시하고 상기 오류를 확인하십시오.

+0

나는 응답으로 질문을 업데이트했다. 감사. – jeffcook2150

0

e.target이 FileReference로 인스턴스화 할 때 상속의 행에 없기 때문에 SmxFR에 캐스트 할 수 없습니다. 다른면에서는 SmxFR Object to FileRefernce를 사용할 수 있습니다.

+0

흠, FileReferenceList를 사용하여 사용자가 여러 파일을 한 번에 선택할 수 있도록하고 있습니다. 필자는'FileReferenceList.fileList'에서'FileReference' 객체 대신'SmxFR' 객체를 썼다면 무시해야할까요? – jeffcook2150

+1

그래, 가장 좋은 방법은 원하는대로 이벤트를 확장하는 것입니다. 쓰기를위한 나의 제안을보십시오. 도로가 아닌 차를 움직여 라. ;) – Myk

2

이벤트 리스너를 통해 객체를 완전히 전달할 수 있습니다. 특정 방식으로 완료되었습니다. 나는 당신이 작은 실수를 저질렀을 때 나중에 문제를 일으킬 수있는 핵심 라이브러리를 확장하려고 시도하는 것이 아니라 올바르게 수행하는 방법을 배웁니다.

내 솔루션 : FileReference를 확장하는 대신 Event를 확장하고 여기에 속성을 추가하십시오.

var myEvent:MyExtendedEvent = new MyExtendedEvent(); 
myEvent.myCustomProperty = myValue; 
dispatchEvent(myEvent); 

그런 다음 핸들러에 그냥 쓰기 :

function myEventHandler(e:MyExtendedEvent):void { 
    trace(e.myCustomProperty); 
} 

이 길을 갈 훨씬 더 고통! 추가 된 이점은 다른 Flash 개발자가 어디서나 코드를 살펴 본다면 표준이 아닌 사용자 정의 FileReference로 얼굴을 때릴 수 없다는 것입니다. :)

+0

이 시도했지만 원래 수신기가 Event.COMPLETE에 있습니다. 맞춤 이벤트가 전송 될 때 실행하도록합니다. 따라서 FileReference에 대해 Event.COMPLETE이 발생하면 dispatchEvent를 보내야합니다 ... 문제는 fr.Event.COMPLETE에 대한 내 응답이 이벤트를 전달하는 것이라도 문제가됩니다. 아직 매개 변수가 없습니다. 나는 통과하고 싶다. 도움이되는 방법을 알고 있습니까? 나는 이것을 끝내야한다. – jeffcook2150

+0

완전한 처리기가 당신을 도울 수 있어야합니다 - Event.currentTarget을 참조 할 수 있다는 것을 알고 있습니까? 이 이벤트는 이벤트를 전달한 객체에 대한 참조를 전달합니다. 따라서 myVal 속성에 대한 액세스를 원한다면이 객체를 전달하는 객체의 속성입니다. function completeHandler (e : Event) : void { var myVal : Object = e.currentTarget.valueYouWant; var myEvent : MyCustomEvent = new MyCustomEvent(); myEvent.myVal = myVal; dispatchEvent (myEvent); } 의미가 있습니까? 이벤트 모델을 이해하는 데 시간을 할애하면 많은 것을 배울 수 있습니다. – Myk

관련 문제