0

アプリケーションの状態に応じて表示/非表示にしたい子を持つビュースタックがあります

    <?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" 
               xmlns:eworx="com.eworx.*"
               xmlns:view="com.eworx.view.*" 
               xmlns:components="com.eworx.view.components.*"
               skinClass="com.eworx.view.skins.MainAppSkin" 
               xmlns:layouts="com.eworx.view.layouts.*"
               currentState="login"
               initialize="init(event)"
               creationComplete="complete(event)" 
               width="100%" 
               height="100%">


    <fx:Style source="assets/css/screen.css" />
    <fx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.core.FlexGlobals;
            import mx.events.FlexEvent;

            import nl.demonsters.debugger.MonsterDebugger;

            private var debugger:MonsterDebugger;

            [Bindable]
            public var apiUrl:String;

            [Bindable]
            public var customerType:String;



            protected function init(event:FlexEvent):void
            {
                debugger = new MonsterDebugger(this);
            }

            protected function complete(event:FlexEvent):void
            {
                var activated:Boolean = FlexGlobals.topLevelApplication.parameters.activated;
                var passwordReset:Boolean = FlexGlobals.topLevelApplication.parameters.passwordReset;
                var message:String = FlexGlobals.topLevelApplication.parameters.message;

                apiUrl = FlexGlobals.topLevelApplication.parameters.apiUrl;

                if(activated)
                {
                    Alert.show(message,"Notice");
                }

                if(passwordReset)
                {
                    Alert.show(message,"Notice");
                }

                systemManager.addEventListener(MouseEvent.MOUSE_WHEEL,onMouseWheel,true);

            }

            private function onMouseWheel(e:MouseEvent):void
            {
                e.delta *= 5;
            }

        ]]>
    </fx:Script>

    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
        <eworx:Seven7Context contextView="{this}" />
        <s:Fade id="fadeIn" alphaFrom="0" alphaTo="1" duration="300" />
        <s:Fade id="fadeOut" alphaFrom="1" alphaTo="0" duration="300" />
        <s:Rotate3D id="r3d" angleYFrom="0" angleYTo="360"  duration="300" />
    </fx:Declarations>

    <s:states>
        <s:State name="login" />
        <s:State name="wholesale"  />
        <s:State name="retail"  />
    </s:states>

    <view:LoginForm id="loginForm" includeIn="login" horizontalCenter="0" verticalCenter="0" />

    <s:Group excludeFrom="login" width="960" horizontalCenter="0">

        <s:BitmapImage width="100%" height="42" x="13" y="80" source="@Embed('assets/garnish/bar.png')" />
        <mx:Image source="assets/garnish/logo.png" top="23" />

        <s:HGroup verticalAlign="middle" x="198" y="47">
            <s:TabBar  skinClass="MainMenuTabBarSkin" dataProvider="{vs}"  buttonMode="true"/>
            <mx:LinkButton id="logout" label="Logout" click="{currentState='login'}" />
        </s:HGroup>

        <s:HGroup top="0" right="0" gap="1" verticalAlign="top">
            <components:OfferList />
            <components:MarginBuildersTrack />
            <components:CartTrack top="0" />
        </s:HGroup>

        <mx:ViewStack 
            id="vs" 
            top="120"
            horizontalCenter="0" 
            width="960" 
            height="100%" 
            resizeToContent="true" >
            <view:HomePage showEffect="{fadeIn}" hideEffect="{fadeOut}" label="Home" />
            <view:ShowroomPage showEffect="{fadeIn}" hideEffect="{fadeOut}" label="Showroom" />
            <view:CataloguePage showEffect="{fadeIn}" hideEffect="{fadeOut}" label="Catalogue" />
            <!--<view:IncentivesPage showEffect="{fadeIn}" hideEffect="{fadeOut}" label="Incentives" />-->
            <view:RetailCustomerProfilePage includeIn="retail" showEffect="{fadeIn}" hideEffect="{fadeOut}" label="My Profile" />
            <view:WholesaleCustomerProfilePage includeIn="wholesale" showEffect="{fadeIn}" hideEffect="{fadeOut}" label="My Profile" />
            <view:ClientsPage excludeFrom="retail,login" showEffect="{fadeIn}" hideEffect="{fadeOut}" label="My Clients" />
            <view:CartPage showEffect="{fadeIn}" hideEffect="{fadeOut}" label="My Cart" />
            <view:OrdersPage showEffect="{fadeIn}" hideEffect="{fadeOut}" label="My Orders" />
        </mx:ViewStack>
    </s:Group>

</s:Application>

ご覧のとおり、小売状態の小売顧客ビューと卸売状態の卸売顧客ビューを含めます。問題は、アプリを実行すると、どちらの状態にも表示されないことです。

何か案は?

4

1 に答える 1

0

これは私にとって奇妙なアプローチです。ViewStackの全体的な目的は、一度に1つのアイテムのみを表示することです。これは非常に奇妙なアプローチです。

dataProviderがViewStackであるタブバーがあるようです。ただし、ViewStackはコンポーネントのバインド可能なプロパティとして作成されておらず、初期状態を設定しているようには見えません。だから、私はこれが起こっていると理論づけます:

  1. アプリはデフォルトの状態で読み込まれます。これは空の文字列です。
  2. ViewSTackおよび/またはTabBarは、これらの子なしで初期化されます
  3. 何らかの理由でアプリの状態が変化する
  4. TabBarは更新されません

CreationPolicyも機能する可能性がありますが、よくわかりません。何が起こっているのかを理解するには、コードをステップスルーする必要があります。これに対する別のアプローチを検討することを強くお勧めします。ユーザーのセキュリティ設定または現在の状態に基づいて、タブバーナビゲーターdataProviderを手動で作成する可能性があります。

于 2010-09-17T11:44:05.640 に答える