Reputation: 2973
<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>
Now I know I could make another class and extend tilelist and override this method there and it will work alright, because it will find the method to be overridden in super class's scope. But I actually want to do this inline at component level (I don't want to create another file, every time I have to do small modification in a tilelist, datagrid etc).
-------------------------- FULL CODE Prototype (with functions logic not written)---------
<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(data.@date)"
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>
Upvotes: 1
Views: 1802
Reputation: 14221
Try this:
<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>
In your case you're trying to override VBox
's method which is absent.
Edited after expanding post:
The Flex Rule #1 which I always follow is:
Avoid inline MXML components.
Inline components increase complexity and decrease readability. It can be used only in case of fast prototyping (just simple markup without code) when you definitely know what you're doing. So you need rich practical skills for that.
But your code has at least three simptoms to avoid inline components:
So I suggest you two things:
Upvotes: 2