2011-01-19 5 views
1

나는 봉쇄 계층에 actionscript-instantiated 구성 요소가 있습니다. ComboBox를 확장하지만 동적으로 인스턴스화됩니다. 필요할 때 언제든지 알 수 있습니다.봉쇄 트리에서 부모로부터 데이터를 가져 오는 표준 방법이 있습니까?

어딘가에 포함 계층 구조에서, 논리적으로 말하면 콤보 상자에 유효한 값을 입력하는 NavigatorContent를 확장하는 것이 있습니다.

해당 하위 구성 요소가 올바른 값 집합에 대한 참조를 얻는 표준 방법은 무엇입니까?

답변

1

자식을 생성 할 때 자체 리플렉션을 통해 버블 링 이벤트 (CHILD_CREATED)를 전달하도록하면이 문제를 해결할 수 있습니다. 그런 다음 유효한 값 집합에 액세스 할 수있는 객체에서 CHILD_CREATED 이벤트를 수신 대기하기 만하면됩니다. 아이가 생성 될 때 알고 리스너를 추가하고 값

2 아이가 생성 #에에 refrence 필요 - -

# 1 부모가 생성되는 등의 자기에 refrence로 CHILD_CREATED 동적 이벤트를 전달을 속성

# 3 부모가 듣습니다. CHILD_CREATED - 하위 구성 요소에 대한 참조를 추출하고 해당 데이터 공급자를 유효한 값 집합으로 설정합니다.

편집 : 당신이 DATAGROUP에 따라 구성 요소를 처리하는 경우 이런 종류의 문제를 처리 할 수 ​​

훨씬 깨끗한 방법은 rendererAdd이 (경우에 렌더러에에 refrence가) 사용하는 것입니다. 이것은 정확히을 처리 할 표준 방법 일 것입니다.

데이터 그룹을 사용하여 직접 액세스해야하는 구성 요소를 표시하려면 rendererAdd 이벤트 만 사용하면됩니다. 해당 문제에 적용 할 수없는 경우, 나는 CHILD_CREATED 메서드를 사용합니다.

1

이 문제를 해결하는 표준 방법이 하나 있다고 생각하지 않습니다. 가능한 많은 솔루션이 있습니다. 당신은 할 수 :

  • 는 NavigatorContent에 대한 참조를 전달 자식 생성자
  • 에 인수로 값을 전달하고 직접 인스턴스화
  • 에 값을 얻을 NavigatorContent에 대한 참조를 전달하고 변화를 추가 새 값이
  • 아이
  • 생성 및 데이터 인구를 관리 할 수있는 프록시 또는 위임 클래스를 만듭니다를 작성하고 채울 NavigatorContent에 대한 참조를 가지고있는 공장 또는 공장 방법을 사용하여 설정 될 때마다 화재 그것에 수신기, 모든 아이의 NavigatorContent
  • 의 엉 ...

나는 톤 이상이 확신 해요.

모두는 프로그램이 수행하는 작업, 나머지 계층 구조가 함께 작동하는 방법, 해당 값의 업데이트시기 및 변경시기, 수행해야 할 다른 요구 사항에 따라 다릅니다.
여기에서 시작하여 사람들이 여기서 작성한 제안을보고 자신의 시나리오에 가장 적합한 것을 선택하십시오.

+0

일반적인 경우에는 작동하지 않는 이유는 기본적으로 "필요한 경우"구성 요소가 데이터를 필요로하는 동적으로 생성 된 구성 요소의 전체 트리 아래에 원하는 모든 정보를 전달해야하기 때문입니다. Haemp의 대답은 클라이언트가 부모에게 필요한 데이터를 요청할 수있는 메커니즘을 제공합니다. FWIW, 나의 초기 순진한 해결책은 내가 데이터를 가지고있는 클래스를 찾고있는 containment tree를 걷는 것이었다. 그것은 빠르고 더럽고, 일을하며, 우아함이 전혀 없습니다. 그것은 또한 캡슐화를 심각하게 깨뜨린다. –

+0

팩토리를 만들면 요소를 포함 트리 아래로 전달할 필요가 없으며 캡슐화도 중단되지 않습니다. NavigatorContent에 대한 참조가 포함 된 CreationManager 싱글 톤을 만든 다음 CreationMananager.instance.getComboBoxFactory(). createComboBox()를 사용합니다. 어디서나 당신이 필요합니다. 표시 목록에 의존하지 않고 NavigatorContent가 어떤 종류의 자식을 처리해야하는지 알 필요도 없습니다. 그게 일반적으로 어떻게 작동하지 않습니까? – weltraumpirat

+0

당신이 옳습니다. 감사! –

관련 문제