2009-11-09 65 views
0

我有一个页面(下面)有一个datagrid,列出了从XML文件(下面)返回的“item”的内容,并且它在加载时在viewstack中为每个项目创建了一个页面发现(工作)它也呈现每个面板内的页面(下面),但我有问题传递数据。每个页面都会呈现并加载XML数据的第一个结果,而不是每个页面都有自己的数据,它们都与第一页相同。面板内的Flex呈现器数据

HomePage.mxml

<?xml version="1.0" encoding="utf-8"?> 
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" 
width="100%" height="100%" 
creationComplete="init()" 
xmlns:software="com.xd.components.pages.software.*" 
xmlns:pages="com.xd.components.pages.*" 
xmlns:renderers="com.xd.components.renderers.*"> 
<mx:Script> 
<![CDATA[ 
import mx.core.Application; 
import com.xd.components.renderers.PageListRenderer; 
import mx.containers.Panel; 
import mx.core.Container; 
import com.xd.components.renderers.SoftwareListRenderer; 
import mx.utils.ObjectProxy; 
import mx.controls.Alert; 
import mx.rpc.events.ResultEvent; 
import mx.containers.VBox; 
[Bindable] public var httpData:Object; 
[Bindable] public var selectedItem:String; 

     private function init():void { 
      //get data 
      httpService.send();  
     } 

     //private const MAX_CHILDREN:uint = 5; 

     private function viewstack_addChild(name:String):void { 
      var p:Panel = new Panel(); 
      p.id = name; 
      p.name = name; 
      p.title = name; 
      p.percentWidth = 100; 
      p.percentHeight = 100; 
      var randColor:uint = Math.random() * 0xFFFFFF; 
      p.setStyle("backgroundColor", randColor); 
      var pR:PageListRenderer = new PageListRenderer(); 
      //var data:Object; 
      //Do something to get the data to be displayed; 
      //data = httpService.lastResult.item; 
      pR.data = httpData; 
      p.addChild(pR); 
      myViewStack.addChild(p); 
     } 
     private function httpResult_handler(evt:ResultEvent):void { 
      if (evt.result.software.item) { 

      httpData = XML(evt.result).descendants("item"); 
      var item:Object = httpData; 
      for each(item in httpData) { 
       viewstack_addChild(item.name); 
      } 
      } 
     } 
    public function switchView(viewId:String):void 
    { 
     var container:Container = Container(myViewStack.getChildByName(viewId)); 
     selectedItem = viewId; 
     if (container != null) 
     { 
      myViewStack.selectedChild = container; 
     } 
    } 
    ]]> 
</mx:Script> 

<mx:HTTPService id="httpService" url="data/Software.xml" resultFormat="e4x" result="httpResult_handler(event)" fault="Alert.show('XML Data Error')" /> 

<mx:VBox width="100%" height="100%" horizontalAlign="center" verticalAlign="middle"> 
<mx:HBox width="100%" height="100%"> 
<mx:VBox width="30%" height="100%"> 
<mx:Panel borderThicknessLeft="0" borderThicknessRight="0" borderThicknessBottom="0" width="100%" height="100%" title="Software List:"> 
    <mx:DataGrid id="myDG" 
       dataProvider="{httpData}" 
       headerHeight="0" 
       editable="false" 
       width="100%" height="100%" 
       rowHeight="50" 
       itemClick="switchView(myDG.selectedItem.name);"> 

     <mx:columns> 
      <mx:DataGridColumn itemRenderer="com.xd.components.renderers.SoftwareListRenderer" /> 
     </mx:columns> 

    </mx:DataGrid> 
</mx:Panel> 
</mx:VBox> 
<mx:VBox width="70%" height="100%"> 
<mx:ViewStack id="myViewStack" width="100%" height="100%" hideEffect="WipUp" showEffect="WipeDown" creationPolicy="all"> 
    <pages:NewsPage id="NewsPage" height="100%" width="100%" horizontalScrollPolicy="off" verticalScrollPolicy="off" /> 
    <software:ShowTracker id="ShowTracker" height="100%" width="100%" horizontalScrollPolicy="off" verticalScrollPolicy="off" /> 
</mx:ViewStack> 
</mx:VBox> 
</mx:HBox> 
</mx:VBox> 
</mx:Canvas> 

PageListRenderer.mxml

<?xml version="1.0" encoding="utf-8"?> 
<mx:HBox 
height="100%" 
width="100%" 
xmlns:mx="http://www.adobe.com/2006/mxml"> 

<mx:Script> 
<![CDATA[ 
    import mx.core.Application; 
]]> 
</mx:Script> 
<mx:VBox width="100%" height="100%"> 
<mx:VBox height="70%" width="100%" horizontalAlign="center" verticalAlign="middle"> 
    <mx:Image source="{data.image}" width="90%" height="90%"/> 
</mx:VBox> 
<mx:VBox height="30%" width="100%" horizontalAlign="left" verticalAlign="top"> 
    <mx:Label width="100%" text="Name/Version:" color="#FFFFFF"/> 
    <mx:Label width="100%" text="{data.name}" color="#FFAE00"/> 
    <mx:Label width="100%" text="{data.version}" color="#FFAE00"/> 
    <mx:Label width="100%" text="{data.longdesc}" color="#FFFFFF"/> 
<mx:Button click="installApp()" label="Install Application" horizontalCenter="0" verticalCenter="0" width="160" height="52" id="install" visible="false"/> 
    <mx:Button click="launchApp()" label="Launch Application" horizontalCenter="0" verticalCenter="0" width="160" height="52" id="launch" visible="false"/> 
</mx:VBox> 
</mx:VBox> 
</mx:HBox> 

Software.xml

<software> 

<item> 
<name>ShowTracker</name> 
<version>1.0</version> 
<shortdesc>TV Show Tracker.</shortdesc> 
<image></image> 
<longdesc>ShowTracker allows you to manage all the TV Shows you watch. I helps you keep track of what episode you are upto for each series you are currently watching</longdesc> 
<appid>com.showtracker</appid> 
<pubid>EB6DA1B683461BF1C71FEC13E276982941DF167B.1</pubid> 
<appurl>http://www.nitcom.com.au/showtracker/downloads/ShowTracker-v1.air</appurl> 
<runversion>1.5</runversion> 
</item> 
<item> 
<name>Test2</name> 
<version>1</version> 
<shortdesc>test desC#2</shortdesc> 
<image>test1.jpg</image> 
<longdesc>test1.jpg</longdesc> 
<appid>com.showtracker</appid> 
<pubid>EB6DA1B683461BF1C71FEC13E276982941DF167B.1</pubid> 
<appurl>http://www.nitcom.com.au/showtracker/downloads/ShowTracker-v1.air</appurl> 
<runversion>1.5</runversion> 
</item> 
<item> 
<name>Test #3</name> 
<version>1</version> 
<shortdesc>test desC#3</shortdesc> 
<image>test1.jpg</image> 
<longdesc>test1.jpg</longdesc> 
<appid>com.showtracker</appid> 
<pubid>EB6DA1B683461BF1C71FEC13E276982941DF167B.1</pubid> 
<appurl>http://www.nitcom.com.au/showtracker/downloads/ShowTracker-v1.air</appurl> 
<runversion>1.5</runversion> 
</item> 
</software> 

回答

0

不知道这是否是引起问题,但它看起来像这样:

private function httpResult_handler(evt:ResultEvent):void { 
    if (evt.result.software.item) { 

     httpData = XML(evt.result).descendants("item"); 
     var item:Object = httpData; 
     for each(item in httpData) { 
      viewstack_addChild(item.name); 
     } 
    } 
} 

需求是这样的:

private function httpResult_handler(evt:ResultEvent) :void { 
    if(evt.result.software.item){ 
    var httpData:XMLList = XML(evt.result).descendants("item"); 
    for each(var item:Object in httpData){ 
     viewstack_addChild(item.name); 
    } 
    } 
} 

,真的,你应该通过视图叠加整个项目,并让它采取什么样的,它需要在发送个人性质的,而不是。

+0

嗨格雷格,谢谢你的回应,我没有这样做在“私人函数viewstack_addChild(名称:字符串):无效”其中pR.data = httpData?或者该部分不正确?您所指的功能只是将名称发送给它,以便可以使用该唯一名称创建每个页面。 – medoix 2009-11-10 04:45:27

+0

你粘贴的版本有问题,我最初用于httpData的变量是一个可绑定的对象,因此,如果我将var httpData:XMLList更改为httpData并将顶部的变量更改为XMLList,那么这会破坏整个批次回到之前的工作方式,数据网格很好,但网页都有相同的内容。 – medoix 2009-11-10 04:46:12

+0

一些工作后,你是正确的,而不是只传递它item.name我现在传递整个项目,我改变viewstack_addChild(name:String)函数viewstack_addChild(item:Object),所以我现在可以正确使用所有的数据。谢谢Greg。 – medoix 2009-11-10 07:33:43