확장 가능한 UI 요소를 사용하는 응용 프로그램을 작성하고 있습니다. 구성 요소를 사용하여 런타임에 정확한 구현이 결정됩니다. 예를 들어, 구성에 따라 글 머리 기호 목록, 번호 매기기 목록, 두 개의 열 목록 등으로 표시되는 항목 목록을 표시하려고합니다. 포함하는 응용 프로그램은 특정 구현에 대해 아무것도 모르는 것을 제외하고는 메서드 호출 setItems(items:Array):void
을 지원하는 형식입니다. 이제SWF 경계에서 유형이 지정된 변수에 할당 나누기
package my.stuff {
public class TwoColumnList extends BaseList {
protected var m_columns:Array;
public function TwoColumnList() {
super();
m_columns = new Array();
m_columns.push(new Array());
m_columns.push(new Array());
}
public override function setItems(items:Array):void {
for (var i:int = 0; i < items.length; i++) {
m_items.push(items[i]);
m_columns[i%2].push(items[i]);
}
}
}
}
: 내가 예를 들어, 수행하는 전문 구현을 만들 수있는 두 개의 열 목록을
package my.stuff {
public class BaseList extends MovieClip {
protected var m_items:Array;
public function BaseList() {
m_items = new Array();
}
public function setItems(items:Array):void {
for (var i:int = 0; i < items.length; i++)
m_items.push(items[i]);
}
}
}
을 그리고 :
은 그래서 예를 들어, 기본 클래스를 설정 한 UI 자체는 Flash Professional에서 FLA로 수행되며 클래스 "TwoColumnList"는 "문서 클래스"로 사용됩니다. 대상 SWF에 FLA ("publish")를 컴파일 한 다음 응용 프로그램에로드하려고합니다. 작동하지 않는이 제외public function startLoading(implURL:String):void) {
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, doneLoadingImpl);
loader.load(new URLRequest(implURL));
}
public function doneLoadingImpl(e:Event) {
var info:LoaderInfo = e.target as LoaderInfo;
var impl:DisplayObject = info.content;
m_containerClip.addChild(impl);
var listImpl:BaseList = impl as BaseList;
impl.setItems(m_allItems);
}
을 - addChild()
잘 작동하지만 null
에서 BaseList
결과 캐스트 (안 예외 - 단지 null
) : 일반적으로 나는 이것이과 같이 일을 기대. 나는 잘 impl
MovieClip
에 캐스팅 할 수 있으며 캐스트 업 후 잘 나는이 같은 BaseList
에, TwoColumnList
에 그것을 디렉토리를 캐스팅 할 수 있습니다
...
var listImpl:BaseList = impl as TwoColumnList;
...
을 따라서 작동,하지만 정말의 목적을 패배 전체 운동 - 이 아니며은 미래에 생성 될 수있는 특정 UI 구현을 사전에 알고 있습니다.
나는 info.applicationDomain.getDefinition
에 대해 어딘가 읽었지만 어떤 효과가 있다고 말할 수는 없습니다.
저는 하루 종일 일하는 ActionScript 개발자가 아니며, 주요 개발자가 더 이상 회사와 함께하지 않은 프로젝트에서 도움을 청했습니다. 도움이 필요합니다. 고맙습니다.
@weltraumpiray : 일반적으로 당신이 말한 것은 좋은 생각처럼 들리므로 대답을 받아 들일 것이지만 실제로는 실제 문제가 아닙니다.실제 문제는 내가 멍청하다는 것입니다. - FlashBuilder에서 빌드 한 클래스로 FLA를 컴파일하여 시각적으로 만들었지 만 올바른 소스 디렉토리를 참조하도록 FLA를 설정해야합니다. 그렇지 않으면 Flash Professional에서 사실은 지정된 "문서 클래스"의 클래스 구현을 보지 않으며 코드가없는 스텁을 행복하게 컴파일합니다. "ActionScript 설정"에서 소스 디렉토리 설정을 수정 한 후 모든 것이 예상대로 작동했습니다. :-) – Guss
@Guss : 문제는 실제로 두 개의 다른 BaseLists가 경쟁 한 것처럼 보입니다.) 어쨌든 인터페이스에 대해 생각해야합니다. 동일한 클래스를 둘 이상의 SWF로 컴파일하는 것은 좋은 생각이 아닙니다. – weltraumpirat
고맙습니다 @weltraumpirat,하지만 특정 경우 (예제 코드는 아님)에서는 기본 클래스가 많은 로직을 제공하며 특수화는 FLA의 시각적 디자인을 기본 클래스의 논리에 "붙이기"위해 사용됩니다 메트릭 및 일부 작은 동작의 특수화 제공). – Guss