Hello everyone,
I have a difference in behaviour using Flex which I cannot understand (I am
rather new to this). Here is the thing:
I have a FarmBoard.mxml component that extends Canvas, which contains:
<mx:Grid x="12" y="70" width="448" height="271">
<mx:GridRow width="100%" height="100%">
<farm:FarmGridItem styleName="gridItem" width="100%"
height="100%" id="gridCell2"/>
<farm:FarmGridItem styleName="gridItem" width="100%"
height="100%" id="gridCell5"/>
...
</mx:GridRow>
</mx:Grid>
The FarmGridItem is an ActionScript component defined like this:
public class FarmGridItem extends GridItem
{
private var _innerCanvas:Canvas;
public function FarmGridItem()
{
trace(this + "\t Initializing farm grid item");
super();
var canvas1:Canvas = new Canvas();
canvas1.percentWidth = 100;
canvas1.percentHeight = 100;
canvas1.setStyle("backgroundColor", "0xFFFFFF");
canvas1.setStyle("backgroundAlpha", "0.0");
canvas1.addEventListener(DragEvent.DRAG_ENTER, onDragEnter);
super.addChild(canvas1);
_innerCanvas = new Canvas();
_innerCanvas.percentWidth = 90;
_innerCanvas.percentHeight = 90;
_innerCanvas.setStyle("horizontalCenter", "0");
_innerCanvas.setStyle("verticalCenter", "0");
canvas1.addChild(_innerCanvas);
// For debugging purposes
var _innerCanvas2:Canvas = new Canvas();
_innerCanvas2.setStyle("backgroundColor", "0xFFFFFF");
_innerCanvas2.setStyle("backgroundAlpha", "1.0");
this.addChild(_innerCanvas2);
}
override public function addChild(child:DisplayObject):DisplayObject
{
trace(this + "\t Adding child: " + child);
(child as UIComponent).percentHeight = 90;
(child as UIComponent).percentWidth = 90;
return _innerCanvas.addChild(child);
}
Basically its role is to create "smaller" objects on the main grid (I did
not find another way to make sure that everytime I add an object to my main
Grid, it takes only, say, 90% of the cell space).
Please note the folowing piece of code in the constructor that I have added
for debugging purposes.
var _innerCanvas2:Canvas = new Canvas();
_innerCanvas2.setStyle("backgroundColor", "0xFFFFFF");
_innerCanvas2.setStyle("backgroundAlpha", "1.0");
this.addChild(_innerCanvas2);
With this code, I get a grid full of white cells (which is what I want). If
I remove the above piece of code to call it from another place (this
function gets called after the creationComplete event is dispatched; I use
it to initialize the data on each of my grid cells):
private function initializeFarm():void
{
var gridItem:FarmGridItem =
FarmGridItem(getFarmView()["gridCell5"]);
if (gridItem != null)
{
// We really go through this piece of code
var _innerCanvas2:Canvas = new Canvas();
_innerCanvas2.setStyle("backgroundColor", "0xFFFFFF");
_innerCanvas2.setStyle("backgroundAlpha", "1.0");
gridItem.addChild(_innerCanvas2);
}
}
}
However, after the above code executes, the background of my cells
stubbornly keeps on remaining transparent (even though I have a log that
says FarmBoard226.Grid237.GridRow238.gridCell5 Adding child:
CanvasView375)
I do not know if I have provided enough information, but does anyone have a
clue on why the behaviour is different?
Thanks a lot,
--
Sebastien Tromp