2011-08-05 3 views
1
<mx:TileList id="tl" allowMultipleSelection="true">    
    <mx:itemRenderer> 
     <mx:Component>      
     <mx:VBox height="100%"width="100%" borderSides="borderStyle="solid"> 
      <mx:Text id="txt1" text="{getText(XML(data))}" selectable="{_selectable}" /> 
      <mx:Script> 
     <![CDATA[ 
     import mx.controls.listClasses.IListItemRenderer; 

      public override function set data(obj:Object):void{ 
      //this override function works alright 
      } 

      private function getText(data:XML):String{ 
      // some logic inside this function. Works fine. 
      } 


    override protected function drawSelectionIndicator(indicator:Sprite, x:Number, y:Number, width:Number, height:Number, color:uint, itemRenderer:IListItemRenderer):void{ 
     //this function gives me compile error - "Method marked override must override another method"       } 


      ]]> 
     </mx:Script> 
     </mx:VBox> 
     </mx:Component> 
    </mx:itemRenderer> 
    </mx:TileList> 

지금 내가 다른 클래스를 만들고 TileList 구성을 확장하고있다,이 메소드를 오버라이드 (override) 할 수 알고 다른 방법을 재정의해야하고 방법을 찾을 수 있기 때문에 슈퍼에서 오버라이드 (override) 할, 확실히 작동합니다 수업의 범위. 하지만 실제로 구성 요소 수준에서이 인라인을 수행하려고합니다 (타일 목록, DataGrid 등에서 작은 수정을 할 때마다 다른 파일을 만들고 싶지 않습니다).TileList 구성의 itemRenderer 오류 : override로 표시된 메서드는

-------------------------- FULL CODE 프로토 타입 (함수 로직을 쓰지 않음) ---------

<mx:VBox horizontalAlign="center" verticalAlign="middle"> 
    <mx:HorizontalList id="headerList" width="100%" columnCount="7" paddingBottom="0" selectable="false" columnWidth="98" rowHeight="40"> 
    <mx:dataProvider> 
         <mx:Array> 
         <mx:String>Sunday</mx:String> 
         <mx:String>Monday</mx:String> 
         <mx:String>Tuesday</mx:String> 
         <mx:String>Wednesday</mx:String> 
         <mx:String>Thursday</mx:String> 
         <mx:String>Friday</mx:String> 
         <mx:String>Saturday</mx:String> 
         </mx:Array> 
     </mx:dataProvider> 
<mx:itemRenderer> 
<mx:Component> 
<mx:VBox backgroundAlpha="0.8" height="100%" width="100%" horizontalAlign="center" paddingTop="0" verticalAlign="middle" borderSides="bottom left right" borderStyle="solid"> 
          <mx:Label text="{data}" fontWeight="bold"/> 
         </mx:VBox> 
        </mx:Component> 
       </mx:itemRenderer> 
       </mx:HorizontalList> 
       <mx:TileList id="tl" allowMultipleSelection="true" mouseOver="tl.setStyle('backgroundColor','0xFFFFFF')" paddingTop="0" height="100%" width="100%" borderSides="none" dataProvider="{IndividualData.w.s}" maxRows="4" maxColumns="7" columnCount="7" rowCount="4" rowHeight="110" columnWidth="98">     
       <mx:Script> 
        <![CDATA[ 
         import mx.controls.listClasses.IListItemRenderer; 
         protected override function drawSelectionIndicator(indicator:Sprite, x:Number, y:Number, width:Number, height:Number, color:uint, itemRenderer:IListItemRenderer):void{ 
          return;    
         } 
        ]]> 
       </mx:Script> 
       <mx:itemRenderer> 
        <mx:Component>      
         <mx:VBox height="100%" horizontalAlign="center" width="100%" borderSides=" top bottom left right" borderStyle="solid" 
          click="outerDocument.onItemClick(event,XML(data));onEdit()" doubleClickEnabled="true" doubleClick="onScheduleDetail([email protected])" 
          verticalAlign="middle" mouseOver="onMouseOver()" mouseOut="onMouseOut()" 
          backgroundColor="{_bgColor}"> 
          <mx:Text id="txt1" text="{getText(XML(data))}" selectable="{_selectable}" /> 
          <mx:Script> 
          <![CDATA[ 
           import mx.controls.listClasses.IListItemRenderer; 
           import mx.core.UIComponent; 
           import com.smartLinx.utils.DateUtils; 
           import com.smartLinx.utils.Helper; 
           import com.smartLinx.utils.DateUtils; 
           import com.smartLinx.ScheduleOptimizer.components.ScheduleDetail; 
           import mx.managers.PopUpManager; 
           [Bindable] private var _bgAlpha:Number; 
           [Bindable] private var _selectable:Boolean; 
           [Bindable] private var _bgColor:uint;  
           [Bindable] private var _pastDated:Boolean;  

           /* override protected function drawSelectionIndicator(indicator:Sprite, x:Number, y:Number, width:Number, height:Number, color:uint, itemRenderer:IListItemRenderer):void 
           { 
             return; 
           } */ 
           private function getText(data:XML):String 
            { 
            //         } 

            private function onMouseOver():void{ 
             } 

            private function onMouseOut():void{ 

             } 

            private function onEdit():void{ 
            } 

            public override function set data(obj:Object):void 
            { 

             super.data = obj;         
            }         

           private function onScheduleDetail(work_date:String):void 
           { 
           } 
           ]]> 
          </mx:Script> 
         </mx:VBox> 
        </mx:Component> 
       </mx:itemRenderer> 

       </mx:TileList> 
      </mx:VBox> 
     </mx:VBox> 

답변

2

이 시도 : 귀하의 경우에는

<mx:TileList id="tl" allowMultipleSelection="true">    
     <mx:Script> 
    <![CDATA[ 
    import mx.controls.listClasses.IListItemRenderer; 
override protected function drawSelectionIndicator(indicator:Sprite, x:Number, y:Number, width:Number, height:Number, color:uint, itemRenderer:IListItemRenderer):void{ 
    //this function gives me compile error - "Method marked override must override another method"       } 


     ]]> 
    </mx:Script> 
<mx:itemRenderer> 
    <mx:Component>      
    <mx:VBox height="100%"width="100%" borderSides="borderStyle="solid"> 
     <mx:Text id="txt1" text="{getText(XML(data))}" selectable="{_selectable}" /> 
     <mx:Script> 
    <![CDATA[ 
     public override function set data(obj:Object):void{ 
     //this override function works alright 
     } 
     ]]> 
    </mx:Script> 
    </mx:VBox> 
    </mx:Component> 
</mx:itemRenderer> 
</mx:TileList> 

당신이 결석 VBox의 메소드를 오버라이드 (override)하는 것을 시도하고있다.

포스트 확장 후 편집 :

플렉스 규칙 나는 항상 따라 1 :

Avoid inline MXML components.

인라인 구성 요소가 복잡하게하고 가독성을 감소시킨다. 빠른 프로토 타이핑 (코드가없는 단순한 마크 업)의 경우에만 사용할 수 있습니다. 그래서 당신은 그것을위한 풍부한 실용적인 기술이 필요합니다.

  1. 그것은 하나 개 이상의 인라인 구성 요소가 있습니다

    는하지만 당신의 코드는 인라인 요소를 피하기 위해 적어도 세 simptoms 있습니다.

  2. 인라인 구성 요소 용 ActionScript 코드가 있습니다.
  3. 전체 MXML 클래스는 읽기에는 다소 복잡하고 복잡합니다.

    1. 는 현재 코드에서 인라인 요소를 제거하기 :

  4. 그래서 나는 당신에게 두 가지를 제안한다. 별도의 MXML 클래스에서 컴포넌트를 추출합니다.
  5. 더 이상 사용하지 마십시오. 충분한 기술을 습득하면 현명하게이 규칙을 어길 수 있습니다.
+0

나는 이미 시도 했었습니다 - 부모 노드에서 생각할 수 있다고 생각했지만 - 같은 오류. – Tintin

+0

농담이나 잘못된 행동. 그냥 내 IDE에서 성공적으로 완료되었습니다. – Constantiner

+0

여전히 같은 오류가 발생합니다. 내 타일 목록은 VBox 내부에 있습니다. 내가 뭘 잘못하고 있는지 몰라? – Tintin