--- In [email protected], "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

Reply via email to