2012-04-27 69 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));