Amy, Thanks a lot. That did it.
Thanks, Pradeep On Tue, Apr 13, 2010 at 7:19 PM, Amy <amyblankens...@bellsouth.net> wrote: > > > > > --- In flexcoders@yahoogroups.com <flexcoders%40yahoogroups.com>, > "prad_ch" <pradeep.chaudh...@...> wrote: > > > > I am getting a null object reference error while trying to instantiate an > mxml component from actionscript. This same code works if compiled from > Flash Builder Beta 2 version. > > I am getting the error only if the code is compiled in Flash Builder 4 > (Flex 4 release version). > > > > The problem seems to be related to creation policy of the component but I > have not been able to figure out how to resolve it. I have already specified > creation policy as "all". > > > > Please help. > > Pradeep > > > > Following is the prototype example of code. > > ---------------------------------------------------------- > > CustomAccountGrid.mxml > > > > <?xml version="1.0" encoding="utf-8"?> > > <mx:DataGrid xmlns:fx="http://ns.adobe.com/mxml/2009" > > xmlns:s="library://ns.adobe.com/flex/spark" > > xmlns:mx="library://ns.adobe.com/flex/mx" > > width="100%" height="100%" > > rowHeight="22" showHeaders="false" x="0" y="20" verticalGridLines="false" > > fontSize="12" fontWeight="normal" borderVisible="false" > > > <mx:columns> > > <mx:DataGridColumn > > dataField="name" > > width="200"/> > > <mx:DataGridColumn id="registerBalance" > > textAlign="right" > > width="100"/> > > </mx:columns> > > </mx:DataGrid> > > > > ---------------------------------------------------------- > > AccountView.mxml > > > > <?xml version="1.0" encoding="utf-8"?> > > <s:Panel xmlns:fx="http://ns.adobe.com/mxml/2009" > > xmlns:s="library://ns.adobe.com/flex/spark" > > xmlns:mx="library://ns.adobe.com/flex/mx" > > xmlns:cust="test.custom.component.*" > > width="100%" height="100%" > > cornerRadius="4" > > title="Spending Accounts" > > fontSize="15" fontWeight="bold" creationPolicy="all"> > > > > <s:Group height="24" left="10" right="10" top="10" fontSize="12" > fontWeight="normal" > > > <s:layout> > > <s:HorizontalLayout gap="5" verticalAlign="middle"/> > > </s:layout> > > <mx:LinkButton label="Add" height="24" paddingBottom="2"/> > > <mx:LinkButton label="Manage" height="24" paddingBottom="2"/> > > <mx:LinkButton id="accountTransferLink" label="Account Transfer" > height="24" paddingBottom="2"/> > > <mx:LinkButton label="Refresh" height="24" paddingBottom="2"/> > > </s:Group> > > > > <mx:Accordion width="100%" height="100%" top="44" fontSize="12" > fontWeight="normal" > > creationPolicy="all"> > > <s:NavigatorContent label="Money" width="100%" > > bottom="0" contentBackgroundAlpha="0xFFFFFF" height="70%"> > > <cust:CustomAccountGrid id="moneyAccount" /> > > </s:NavigatorContent> > > <s:NavigatorContent label="Credit" width="100%" height="70%"> > > <cust:CustomAccountGrid id="creditAccount" /> > > </s:NavigatorContent> > > </mx:Accordion> > > > > </s:Panel> > > > > ---------------------------------------------------------- > > AccordionTest.mxml > > > > <?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" > > > xmlns:ui="test.custom.ui.*" > > creationComplete="creationComplete(event)"> > > > > <fx:Declarations> > > <!-- Place non-visual elements (e.g., services, value objects) here --> > > </fx:Declarations> > > > > <fx:Script> > > <![CDATA[ > > import mx.events.FlexEvent; > > > > import test.custom.ui.AccountView; > > private var _spendingAccount : AccountView; > > > > function creationComplete(event:FlexEvent):void{ > > _spendingAccount = new AccountView(); > > _spendingAccount.moneyAccount.dataProvider = {}; > > _spendingAccount.creditAccount.dataProvider = {}; > > } > > ]]> > > </fx:Script> > > <!-- This works fine. creating through script gives error. > > <ui:SpendingAccountView/> > > --> > > </s:Application> > > > > Try this: > > function creationComplete(e:FlexEvent):void { > _spendingAccount = new AccountView(); > _spendingAccount.addEventListener(FlexEvent.UPDATE_COMPLETE, > initSpendingAccount); > } > > function initSpendingAccount(e:FlexEvent):void { > _spendingAccount.moneyAccount.dataProvider = new ArrayCollection(); > _spendingAccount.creditAccount.dataProvider = new ArrayCollection(); > } > > Or, you could just properly encapsulate AccountView and let it set > properties on its own children in commitProperties(). > > HTH; > > Amy > > >