Recently I wanted to set the maxHeight of a component to a percentage. Sadly enough this isn't supported in Flex. There's however a very simple workaround that seems to work all the time: set the maxHeight or maxWidth in the resize event of its container:
<mx:Canvas
id="cnvsComponent"
resize="childComponent.maxHeight = cnvsComponent.height"
width="100%" height="100%">
<mx:Tree id="childComponent" />
</mx:Canvas>
Thursday, January 24, 2008
Tuesday, January 22, 2008
Taming your combobox width
Recently I discovered that setting a combobox to width="100%" doesn't mean the combobox won't grow bigger than the width of its container. If the text cannot be completely displayed your combobox becomes wider than 100%. You can use the following construction to tame its width:
<mx:canvas id="cnvs" width="100%" resize="cb.width = cnvs.width">
<mx:combobox id="cb" text="this is a rather long combobox text" />
</mx:canvas>
Simply add a canvas around the combobox and explicitly set the width of the combobox to the width of the canvas through the resize event of the canvas. This solution works because the problematic behaviour only occurs when using a percentage width.
The same applies to the Label component (and probably some other components as well).
<mx:canvas id="cnvs" width="100%" resize="cb.width = cnvs.width">
<mx:combobox id="cb" text="this is a rather long combobox text" />
</mx:canvas>
Simply add a canvas around the combobox and explicitly set the width of the combobox to the width of the canvas through the resize event of the canvas. This solution works because the problematic behaviour only occurs when using a percentage width.
The same applies to the Label component (and probably some other components as well).
Friday, January 18, 2008
Trouble centering your popups ???
I had some trouble centering popups created through PopupManager. If you simply use 'this' as the parent display object then the popup is 'centered' according to the parent component specified (instead of to the complete stage). If you want to center your popup in the middle of your application screen you should specify 'Application.application.parentDocument'...
Monday, November 12, 2007
Is your TabNavigator showing wrong content?
I ran into a very strange problem: sometimes my tab navigator showed the content of a different tab than the selected tab... This happened when the tabs were VDividedBox containers instead of Canvas containers. Putting a Canvas container around the VDividedBox solved the akward problem. I hope it does for you as well.
Friday, September 21, 2007
How to make Adobe Flex compile 60 times faster
Thanks to a collegue I learned how to speed up compilations with a factor 60!!! It's actually very easy: instead of 10 or 15 projects with references to each other put everything in 1 project. I know that it's 'not done' from a structural point of view but if compilations only take 5 seconds instead of 5 minutes...
Saturday, July 28, 2007
Getting .NET datasets in Flex through webservices
The current support in Flex for .NET datasets is rather 'limited' to say the least. This is a pitty because most .NET developers make use of datasets and the missing support currently prevents major adoption of Flex by the .NET community.
Although this solution doesn't add complete dataset support to Flex it at least allows you to get the records of a .NET dataset (or a datatable) in Flex through an easy webservice call.
Up till now the typical suggestion is to create a class in .NET that matches the datatable layout, create an array based on this class and fill the array with the records of the datatable.
There is however a much easier solution. Your WebMethod in .NET should look like this:
[WebMethod]
public XmlDocument GetAllUsers()
{
dsBC dsBC1 = new dsBC();
// here you should fill the datatable with database records
return GetXml(dsBC1.bcUser);
}
public XmlDocument GetXml(DataTable dt)
{
System.IO.StringWriter sw = new System.IO.StringWriter();
dt.WriteXml(sw);
sw.Close();
XmlDocument xd = new XmlDocument();
xd.LoadXml(sw.ToString());
return xd;
}
When calling the GetAllUsers web method from Flex you can simply bind for example a datagrid to the event.result object.
Dates are returned in W3C format by .NET! Therefore you should convert them to 'real' Flex dates by using the DateUtil routines in corelib.
Although this solution doesn't add complete dataset support to Flex it at least allows you to get the records of a .NET dataset (or a datatable) in Flex through an easy webservice call.
Up till now the typical suggestion is to create a class in .NET that matches the datatable layout, create an array based on this class and fill the array with the records of the datatable.
There is however a much easier solution. Your WebMethod in .NET should look like this:
[WebMethod]
public XmlDocument GetAllUsers()
{
dsBC dsBC1 = new dsBC();
// here you should fill the datatable with database records
return GetXml(dsBC1.bcUser);
}
public XmlDocument GetXml(DataTable dt)
{
System.IO.StringWriter sw = new System.IO.StringWriter();
dt.WriteXml(sw);
sw.Close();
XmlDocument xd = new XmlDocument();
xd.LoadXml(sw.ToString());
return xd;
}
When calling the GetAllUsers web method from Flex you can simply bind for example a datagrid to the event.result object.
Dates are returned in W3C format by .NET! Therefore you should convert them to 'real' Flex dates by using the DateUtil routines in corelib.
Labels:
.net,
adobe flex,
dataset,
datasets,
flex,
webservice
Tuesday, June 12, 2007
Exception after TileList resize
Does this exception look familiar to you:
TypeError: Error #1010: A term is undefined and has no properties. at mx.controls.listClasses::TileBase/mx.controls.listClasses:TileBase::scrollVertically() at mx.controls.listClasses::ListBase/set verticalScrollPosition() at AssetViewerListStandardThumbnails/::OnPage() at AssetViewerListStandardThumbnails/__next_click()
I got it when trying to scroll within a TileList after it was resized. Hotfix 2 doesn't fix the problem. The following trick solved the problem for me: calling the executeBindings() method on the TileList component in the resize event. I hope it does the trick for you as well.
TypeError: Error #1010: A term is undefined and has no properties. at mx.controls.listClasses::TileBase/mx.controls.listClasses:TileBase::scrollVertically() at mx.controls.listClasses::ListBase/set verticalScrollPosition() at AssetViewerListStandardThumbnails/::OnPage() at AssetViewerListStandardThumbnails/__next_click()
I got it when trying to scroll within a TileList after it was resized. Hotfix 2 doesn't fix the problem. The following trick solved the problem for me: calling the executeBindings() method on the TileList component in the resize event. I hope it does the trick for you as well.
Subscribe to:
Posts (Atom)
