2010-11-09 28 views
0

J'utilise Flash Builder 4 Burrito Preview - Création d'une application mobile. J'ai un composant personnalisé appelé footer.mxml. Ce pied de page a 4 boutons, et l'un d'eux a un lable lié à cartValue. J'essaye de maintenir une variable globale appelée cartValue dans toutes les vues et composant de pied de page.Composant Flex utilisant la variable globale

footer.mxml

<s:Group 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="64" chromeColor="#000000" fontSize="10"> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
    <mx:CurrencyFormatter id="currencyFormatter" 
    currencySymbol="$" 
    useThousandsSeparator="true" 
    precision="2" /> 
</fx:Declarations> 



<fx:Script> 
    <![CDATA[ 
    [Bindable] 
    public var cartValue:int; 

    ]]> 
</fx:Script> 

<s:HGroup width="100%" contentBackgroundColor="#000000" paddingBottom="0" paddingLeft="0" 
paddingRight="0" paddingTop="0"> 
<s:Button x="0" y="624.5" width="25%" height="64" label="Account" chromeColor="#2259AA" 
enabled="true" fontSize="10" fontWeight="bold" icon="@Embed('assets/user.png')"/> 
<s:Button x="121" y="624.5" width="25%" height="64" label="Orders" chromeColor="#2259AA" 
fontSize="10" icon="@Embed('assets/doc_lines_stright.png')"/> 
<s:Button x="241" y="624.5" width="25%" height="64" label="Help" chromeColor="#2259AA" 
fontSize="10" icon="@Embed('assets/spechbubble.png')"/> 
<s:Button x="360" y="624.5" width="25%" height="64" label="{currencyFormatter.format(cartValue)}" chromeColor="#2259AA" 
fontSize="10" icon="@Embed('assets/shop_cart.png')"/> 

</s:HGroup> 
    </s:Group> 

RincoTest.mxml

<s:MobileApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    backgroundColor="#000000" firstView="views.RincoTestHome" 
    > 
<fx:Style source="RincoTest.css"/> 
<fx:Declarations> 
<!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 
<fx:Script> 
    <![CDATA[ 

    [Bindable] 
    public var cartValue:int; 
    ]]> 
</fx:Script> 


<s:titleContent> 
    <s:Image left="1" top="3" width="173" height="75" backgroundAlpha="1.0" smooth="true" 
source="assets/iphone_large.png"/> 
</s:titleContent> 
<s:navigationContent> 
    <mx:Spacer width="10" height="82"/> 
</s:navigationContent> 


    </s:MobileApplication> 

Et voilà comment je suis mise en œuvre

<components:footer x="1.65" y="614.95" width="100%" height="64" cartValue="{cartValue}"/> 

J'ai essayé de lier Application.application.cartValue et MobileApplication.application.cartValue. Aucun d'entre eux ne travaille.

S'il existe une meilleure façon de maintenir un cartValue sur l'ensemble de l'application, veuillez me le faire savoir. C'est ma première tentative avec Flex.

Merci, Ernie

Répondre

1

utiliser une variable statique dans le composant.

Appelez-le ComponentName.staticVar. Habituellement, tout ce qui a besoin de savoir sur le global connaît déjà (par exemple les importations) le fichier du composant.

Vive

+0

Supposons que je voulais stocker une variable globale afin que tous les points de vue pourrait y accéder. Quel serait le meilleur moyen? – cfEngineers

1

Une autre solution est en utilisant un modèle singleton: une seule instance que tout les références à travers un accesseur statique.

L'effet est à peu près le même. Le seul avantage d'une référence statique à une instance sur les propriétés statiques est que l'instance peut faire partie d'un héritage et peut remplir une interface.

J'ai eu aussi des problèmes intermittents avec une liaison aux valeurs statiques, mais qui aurait pu être une version précédente, PEBCAK, etc.

Vive