2012-10-17 3 views
1

나는 someStyle가 내 CSS에 정의되어getStyle을 사용하여 문자열을 상수 참조로 대체하려면 어떻게해야합니까?

private static const SOMESTYLE:String = "someStyle"; 
[..] 
<mx:Image source="{getStyle(SOMESTYLE)}" /> 

와 MXML에 getStyle('someStyle')를 교체합니다.

컴파일 중 오류가 발생합니다. 오류 # 1069 : package.class에 SOMESTYLE 속성이 없으며 기본값이 없습니다.

mxml에서 클래스 상수를 참조하는 적절한 방법은 무엇입니까?

편집 : Flex 4.6을 사용하고 있습니다. 이것은 Flex 3.5에서 잘 작동했습니다.

답변

3

정적 변수 또는 메소드가 클래스에 있습니다. 그 클래스의 인스턴스가 아닙니다. 따라서 클래스 이름을 사용하여 참조해야합니다. 인스턴스 이름이 아닙니다. 코드에 클래스 이름을 지정하지 않았습니다. 여기

<mx:Image source="{getStyle(ClassName.SOMESTYLE)}" /> 

그것을 정의 동일한 클래스 내에 정적 상수를 보여준다 액세스하는 코드이다. 이 파일의 이름은 StaticVariablesInSameClass_SO입니다.

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="application1_creationCompleteHandler(event)"> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 

    <fx:Style> 
     @namespace s "library://ns.adobe.com/flex/spark"; 
     @namespace mx "library://ns.adobe.com/flex/mx"; 


     s|Application{ 
      someStyle : 'https://www.flextras.com/Assets/images/flextras_logo3.gif'; 
     } 
    </fx:Style> 

    <fx:Script> 
     <![CDATA[ 
      import mx.events.FlexEvent; 
      private static const SOMESTYLE:String = "someStyle"; 

      protected function application1_creationCompleteHandler(event:FlexEvent):void 
      { 
       trace(this.getStyle('someStyle')); 
       trace(this.getStyle(StaticVariablesInSameClass_SO.SOMESTYLE)); 
      } 

     ]]> 
    </fx:Script> 

</s:Application> 
+1

대단한 답변입니다! 나는 단지 상수가 public이되어야한다고 덧붙일 것이다. –

+0

실제로 많은 의미가 있지만, 컴파일시 오류가 발생한다. [module] SetupUtil.as : 정의되지 않은 속성 ClassName에 대한 액세스. 내 mxml과 동일한 클래스에서 상수를 정의하기 때문에이 문제가 발생합니까? –

+0

ClassName을 실제 클래스 이름으로 바꿔야합니다. @TimofeiDavydik이 말했듯이; 정적 변수가 public인지 확인합니다. 전용이 아닙니다 – JeffryHouser