2011-02-12 4 views
0

저는 (천천히) Flex 4를 배우고 SkinnableComponent를 확장하는 사용자 정의 구성 요소를 스키닝하려고합니다. 구성 요소는 모든 액션에 있으며 기본적으로 다음과 같습니다 : 그들은 아직 생성되지 있기 때문에SkinnableComponent로 모든 SkinSparts를 사용할 수있는 경우에 발생하는 이벤트는 무엇입니까?

package components 
{ 
    import spark.components.supportClasses.SkinnableComponent 

    [SkinState("normal")] 
    [SkinState("over")] 
    [SkinState("selected")]  
    public class AccountSummary extends SkinnableComponent 
    { 
     [Bindable] 
     public var itemIndex:int = 0; 

     [Bindable] 
     public var accountName:String = ""; 

     [Bindable] 
     public var accountNumber:String = ""; 

     [Bindable] 
     public var currentBalance:String = ""; 

     [SkinPart(required="true")] 
     public var lblAccountName:Label; 

     [SkinPart(required="true")] 
     public var lblCurrentBalance:Label; 

     [SkinPart(required="true")] 
     public var lblAccountNumber:Label; 

     [SkinPart(required="true")] 
     public var lblLastUpdated:Label; 

     public function AccountSummary() 
     { 
      super(); 

      lblAccountName.text = accountName; 
      lblCurrentBalance.text = currentBalance; 
      lblAccountNumber.text = "Acc: " + accountNumber; 
      lblLastUpdated.text = "Last Updated: "; 
     } 

     override protected function getCurrentSkinState():String 
     { 
      return "normal"; 
     } 
    } 
} 

난 데 문제는, 다양한 SkinParts의 생성자에 NULL 참조에 있습니다. 나는 그들의 .text 값을 할당하기 위해 그들에게 접근하는 가장 좋은시기가 언제인지 알아 내려고하고있다. 나는 partAdded()를 오버라이드 (override) 할 수있어 각 부분이 추가 될 때 .text 값을 추가 할 수 있지만 모두 사용할 수있을 때 전달되는 마술 이벤트를 듣고 싶습니다.

중요한지 여부는 확실하지 않지만 accountName, accountNumber 변수는 호스트 구성 요소에서 dataProvider와 함께 리피터를 사용하여 할당됩니다. AccountSummary 구성 요소에서 데이터를 사용할 수있을 때와 관련이 있는지 확실하지 않습니다. 또한 대기해야 할 수도 있습니다. FlexEvent.CREATION_COMPLETE를 사용하여 모든 .text 값을 SkinParts에 할당 할 수 있었지만 올바른 이벤트/모범 사례입니까? 어떤 도움이라도 대단히 감사하겠습니다!

답변

2

Flex 4 Component LifeCycle, 특히 component instantiation에 대한 기사를 읽어보십시오. 생성자가 실행될 때 아무 것도 생성되지 않습니다. 참조하는 값 (accountName, lblCurrentBalance. etc ...)은 기본 상태를 벗어나 이동하지 않습니다.

partAdded() 메소드에서 기본값을 설정하려고합니다. 이런 일에 생성자 코드를 다시 작성 : 새 프로그래머라면

public function AccountSummary() 
    { 
     super(); 

    } 

override protected function partAdded(partName : String, instance: Object):void{ 
super.partAdded(partName, instance); 
if(instance == lblAccountName){ 
      lblAccountName.text = accountName; 
else if(instance == lblCurrentBalance){ 

} else if (instance == lblCurrentBalance){ 
    lblCurrentBalance.text = currentBalance; 
} else if (instance == lblAccountNumber){ 
    lblAccountNumber.text = "Acc: " + accountNumber; 
} else if (instance == lblLastUpdated){ 
    lblLastUpdated.text = "Last Updated: "; 
} 

} 

, 당신은 몇 가지 기본적인 프로그래밍 개념 학습에 시간을 할애 할 수 있습니다. 이 ActionScript 3 Guide은 시작하는 데 도움이 될 수 있습니다. 다른 언어를 사용해 본 경험이 있지만 Flex에 익숙하지 않은 사용자라면 full flex documentation을 통해 며칠 동안 책을 읽으면서 머리 글자를 쓰는 것이 좋습니다.

+0

제안에 감사하지만 내 질문에 명시된 바와 같이 - 나는 partAdded에 의존 할 필요가 없기를 바라고 각 부품을 하나씩 점검합니다. 나는 모든 부분이 추가 된 후에 해고 된 어떤 사건을 찾고 있었다. – WesleyJohnson

+0

언급 한대로 구성 요소 수명주기를 확인하겠습니다. 아마도 좋은 생각입니다. – WesleyJohnson

+0

좋아요, 라이프 사이클을 읽으면서 한 번에 모든 스킨 파트를 찾을 수있는 생성자, partAdded 및 creationComplete 전에 여러 이벤트가 있다는 것을 알 수 있습니다. – WesleyJohnson

관련 문제