2012-04-27 23 views
1

我目前正在Flashbuilder 4.6中創建一個移動應用程序,並且希望通過基於他們選擇的菜單項將用戶推送到視圖。我下面的代碼顯示瞭如何試圖將一個字符串從所選列表項轉換成一個類的對象,然後傳遞到了pushView參數:通過將字符串轉換爲類來推送視圖?

<fx:Script> 
    <![CDATA[ 
     import mx.collections.*;    
     import spark.components.SplitViewNavigator; 
     import spark.components.ViewNavigator; 
     import spark.events.IndexChangeEvent; 
     import spark.events.ViewNavigatorEvent; 
     import spark.managers.PersistenceManager; 
     import spark.skins.mobile.SplitViewNavigatorSkin; 

     public var menuAC:ArrayCollection;   
     public var j_array:Array = [{label:"Home", data:"NLView"}, 
      {label:"All Jobs", data:"JList"}, 
      {label:"Company Profiles", data:"SView"}, 
      {label:"Search By Sector", data:"JView"}]; 


     protected function list_changeHandler(event:IndexChangeEvent):void 
     { 
      var selectedItem:String = new String(list.selectedItem.data); 
      //trace("Selected Item = " + selectedItem); 
      var splitNavigator:SplitViewNavigator = navigator.parentNavigator as SplitViewNavigator; 
      var detailNavigator:ViewNavigator = splitNavigator.getViewNavigatorAt(0) as ViewNavigator; 
      splitNavigator.hideViewNavigatorPopUp(); 

      if(list.selectedItem.data == "NewListView") 
      { 
       var myClass:Class = getDefinitionByName(selectedItem) as Class;     
       trace("View Class = " + myClass); 
       detailNavigator.pushView(myClass); 
      } 
      else if(list.selectedItem.data) 
      { 

      } 


     } 

     protected function view1_viewActivateHandler(event:ViewNavigatorEvent):void 
     { 

      if(data.view == "JSFilt") 
      { 
       menuAC = new ArrayCollection(j_array); 
      } 

      list.dataProvider = menuAC; 
      // TODO Auto-generated method stub 
      var splitNavigator:SplitViewNavigator = navigator.parentNavigator as SplitViewNavigator; 
      var detailNavigator:ViewNavigator = splitNavigator.getViewNavigatorAt(1) as ViewNavigator; 
      splitNavigator.hideViewNavigatorPopUp(); 
     } 


    ]]> 
</fx:Script> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 

<s:BitmapImage width="100%" height="100%" source="@Embed('assets/images/sidebg.png')" fillMode="repeat"/> 
<s:BitmapImage horizontalCenter="0" top="5" width="175" height="130" source="@Embed('assets/images/G_S_Logo_170x130.png')"/> 

<s:List id="list" left="0" right="0" 
     color="0xFFFFFF" contentBackgroundColor="0x101010" 
     fontSize="20" width="280" 
     alternatingItemColors="[0x202020,0x2a2a2a]" 
     top="140" horizontalCenter="0" bottom="200" 
     downColor="0x70B2EE" 
     selectionColor="0x70B2EE" 
     change="list_changeHandler(event)"> 
    <s:itemRenderer> 
     <fx:Component> 
      <s:IconItemRenderer messageStyleName="myFontStyle" fontSize="22" height="70" 
           labelField="label" 
           messageField="" 
           /> 
     </fx:Component> 
    </s:itemRenderer>  
</s:List> 

我曾嘗試使用下面的命令也做了也試過不行:

var viewClass:Class = Class(getDefinitionByName(getQualifiedClassName(selectedItem))); 

有沒有人有anyidea如何看待一個列表上選擇一個值,然後使用該字符串名稱的應用推到視圖作爲pushView方法不會接受一個字符串?


感謝您的建議,我喜歡將類添加到數組,然後將其傳遞給pushView。我曾試圖在過去,它沒有工作,所以我用下面的代碼試過你的方法:

public var jobs_array:Array = [{label:"Home", data:"NewListView", class:NewListView}, 
       {label:"All", data:"JList"}, 
       {label:"C Prof's", data:"SView"}, 
       {label:"S By S", data:"JSView"}]; 

正如你可以看到我已經試圖執行您在第一行建議什麼,我收到以下錯誤:

1084: Syntax error: expecting colon before rightbrace. 
1084: Syntax error: expecting identifier before class. 
1084: Syntax error: expecting identifier before rightbrace. 

這必須是一個簡單的語法的東西,但我不能看到它,有人可以幫我這個嗎?

回答

0

getDefinitionByName(selectedItem)幾乎是你想要的,但不完全。請參閱selectedItem是您的陣列中的其中一項,例如{label:"All Jobs", data:"JList"},而不僅僅是"JList"

getDefinitionByName(getQualifiedClassName(selectedItem))絕對不是你想要的,因爲getQualifiedClassName將返回完全合格的類名selectedItem。在這種情況下,這將是Object。然後getDefinitionByName將返回Object類。


getDefinitionByName(selectedItem.data)應該爲你工作就好。例如,selectedItem.data應該是JList,然後getDefinitionByName應返回JList類對象。

0

爲什麼不直接在數據中引用類本身,也不用擔心使用String來表示它。

你的數據項是這樣的:

var data:Array = [ 
{ label: "Item 1", class: ClassToUseForItem1 }, 
{ label: "Item 2", class: ClassToUseForItem2 }, 
{ label: "Item 3", class: ClassToUseForItem3 } ]; 

現在你可以做pushView(list.selectedItem.class)

2
var imageClass:Class=getDefinitionByName("com.robaldred.composers."+imgclass) as Class; 

請加上包的名字是這樣的:com.robaldred.composers.

0

是..這裏是綁定火花視圖堆的答案使用字符串調查了孩子 var str:String =「roof」; viewstack.selectedChild = NavigatorContent(viewstack.getChildByName(str));