2010-09-17 145 views
0

我有我想要显示/隐藏取决于状态的应用程序是的Flex viewstack孩子includeIn工作搞笑

<?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> 

,你可以看到我inlude零售客户视图在零售状态儿童一个viewstack以及批发状态下的批发客户观点。问题是,当我运行我的应用程序时,它们不会出现在两种状态中。

任何想法?

回答

0

这对我来说很奇怪。 ViewStack的全部目的是一次只显示一个项目。这是一个非常奇怪的方法。

我看到你有一个tabbar,其dataProvider是ViewStack。但是,您的ViewStack不是作为组件的可绑定属性创建的,而且您似乎从未设置过初始状态。因此,我推断,这种情况正在发生:

  1. 在默认状态下,这是空字符串
  2. ViewSTack和/或的TabBar没有这些孩子被初始化出于某种原因
  3. 应用程序状态的变化应用程序加载
  4. TabBar不更新

CreationPolicy也可能会发挥作用,但我不确定。你必须通过代码来弄清楚发生了什么。我强烈建议你考虑一个替代方法。可能基于用户安全设置或当前状态手动创建tabbar导航器dataProvider。

+0

我的应用程序有一个默认状态“登录”,它有一个登录表单视图。当用户登录时,我检查他是否是零售客户或批发客户,并相应地更改当前状态。所以我想对每种类型的用户有不同的看法。我使用viewstack作为导航的应用程序视图和tabbar。为什么这是一个奇怪的方法。顺便改变creationPolicy到所有的工作,但我有最初的开销。 – chchrist 2010-09-17 11:57:43

+0

我从来没有见过任何人使用ViewStack作为TabBar的dataProvider。我从来没有见过任何人为ViewStack的孩子使用“includeIn”。这是我说这是奇怪的原因。大多数人认为我已经使用了州或ViewStacks;但你在混合这两个。这就是为什么我说这很奇怪。由于它的工作方式与您的预期相同,因此在将creationPolicy设置为all时,我只会将您指向我关于ViewStack绑定的原始理论,而TabBar不会更改。 – JeffryHouser 2010-09-17 13:13:54

+0

在“登录”状态下,零售或批发不存在包含使用情况的提单。当您更改状态时,TabBar的dataProvider不会更新更新,因为ViewStack不是可绑定的。我敢打赌,如果你在ActionScript中创建ViewStack并使其成为可绑定的,它就可以工作。这将是一件乏味的事,虽然B/C,那么你将不得不在AS3中创建所有ViewStack的子项目。 – JeffryHouser 2010-09-17 13:15:06