2013-08-04 9 views
0

스파크 그룹 컨테이너가 있지만 모든 하위 구성 요소가 MX 구성 요소입니다. 컨테이너가 초기화 될 때 MX 구성 요소에 대한 일부 작업을 수행해야합니다. commitProperties 함수에 연산을 넣으려고했지만 하위 구성 요소는 여전히 null입니다. 나는 그들을 childrenCreated 함수로 이동 시키려고했지만 여전히 null이다. 구성 요소 작업에 어떤 기능을 사용할 수 있습니까? 감사.스파크 컨테이너의 MX 구성 요소가 null입니다.

protected override function commitProperties():void 
     { 
      var defaultFinishedDate:Date=new Date(); 
      defaultFinishedDate.date--; 
      includeFinishedDateSelector.selectedDate=defaultFinishedDate; 
     } 

includeFinishDateSelector은이 함수에서 null이므로 런타임 오류가 발생합니다. 그것은 다음과 같이 정의됩니다 :

<mx:DateField id="includeFinishedDateSelector" formatString="{GeneralUtils.DATE_FORMAT_STRING}" 
    enabled="{includeFinishedCheckBox.selected}" width="18%"/> 

그리고 제가 말했던 것처럼, 그 컨테이너는 스파크 그룹 컨테이너입니다.

답변

0

누구에게 도움을 주려고합니다. 마지막으로 MX 구성 요소의 직접 컨테이너 (부모)를 스파크 컨테이너 (원래 스파크 컨테이너의 MX 컨테이너 였음)로 변경하여이 문제를 해결했습니다.

0

플렉스 수명주기 방법 createChildren()은 작업을 수행 할 수있는 곳이었습니다. 슈퍼 클래스가 createChildren()을 실행 한 후에 그러나 당신은이 일을 할 것입니다 :

override protected function createChildren():void 
{ 
    super.createChildren(); 
    // now do your thing 
} 

또 다른 한가지는 commitProperties() 방법으로 위, 당신은 슈퍼 클래스 메소드를 호출하지 않는 보여줄 것입니다. 그것은 큰 노 - 노입니다. commitProperties() 메서드는 Flex 프레임 워크 AFTER createChildren()에 의해 호출됩니다. 따라서 이론적으로는 commitProperties()으로 접근해야합니다. 돌아가서 super.commitProperties()에 전화를 걸어 다른 곳으로 옮길 수도 있습니다.

마지막으로, 이것이 작동하지 않는다면 Flex가 MXML 컨테이너에서 자식 객체를 인스턴스화하는 방식 때문일 수 있습니다. 따라서 명확하게 작동하는 접근법은 Group 컨테이너에서 Flex 수명주기 이벤트를 수신하는 것입니다. creationComplete 이벤트가 Group에 의해 발송되면 모든 자식이 있음을 보장합니다.

+0

답변 해 주셔서 감사합니다. 사실 나는 함수에서'super.commitProperties' 호출을 가지고 있습니다. 내 예제를 단축하려고하는 동안 실수로 제거했습니다. 이 함수에는 몇 줄이 더 있지만, 필자는 내 질문과 관련이있는 것에 초점을 맞추기 위해 몇 가지를 삭제했습니다. 실제로'creationComplete' 이벤트를'commitProperties'를 해결하기 전에 시도했지만 같은 결과를 얻었습니다. 'childrenCreated'는'createChildren' 다음에 호출되기 때문에, 그 중 하나는 작동하지 않을 것이라고 생각합니다. 다른 어떤 아이디어도 감사 할 것입니다. – user940016

0

또한 callLater에서 코드를 래핑하려고 시도 할 수도 있습니다.이 코드는 기본적으로 다음 단계에서 실행되도록 대기열에 포함됩니다.

callLater(function():*{ 
    var defaultFinishedDate:Date=new Date(); 
    defaultFinishedDate.date--; 
    includeFinishedDateSelector.selectedDate=defaultFinishedDate; 
}); 

그것은 매우 우아 아니지만, 그것을 작동합니다 : 그래서의 creationComplete에서 다음을 수행하십시오.