2009-11-08 48 views
0

我有一個返回xml數據的httpservice。Flex爲一個itemRenderer設置dataProvider

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

我也有使用返回的數據一個DataGrid,並把它傳遞到運行完美的渲染器。

<mx:DataGrid id="myDG" 
dataProvider="{httpService.lastResult.item}" 
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> 

對於每個結果中的XML數據我有一個創建一個新的panel()和渲染一些代碼。

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; 
      pR.data = PageListRenderer; 
      p.addChild(pR); 
      myViewStack.addChild(p); 
     } 

但是我不能,因爲我在DataGrid渲染器做使用相同的{data.name}在此渲染。相反,我得到「未定義」每個領域...我怎麼去通過{httpService.lastResult.item}頁面渲染器也?

編輯:所做的更改。

這是httpservice結果處理程序。

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

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

我也曾嘗試..

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

       data = httpService.lastResult.item; 
        var item:Object = data; 
        for each(item in data) { 
         viewstack_addChild(item.name); 
        } 
      } 
     } 

我也是在viewstack_addChild功能改變了pR.data = data。 我仍然在數據網格中獲取信息,並且我獲取了呈現在每個頁面上的數據,但每個頁面都具有相同的信息(第一個結果),而不是每個頁面的每個結果...

回答

0

我會建議不要讓dataProvider是從http服務返回的數據,而是綁定一個變量來存儲這些數據。然後,任何UI組件天氣初始化或不能使用它。

[Bindable] 
var httpDataService:Object; 

function getData():void 
{ 
    hpptDataService = httpService.lastResult.item; 

。 }

數據網格...

dataprovider = "{httpDataService}" 

其他UI組件

數據提供程序= httpDataService

或在您的情況

data = httpDataService 

記住的Flex有cotrols爲延遲初始化所以如果你的其他控件沒有初始化在你提出http請求的時候,這是不幸的。 以下是來自視圖堆棧參考,但幾乎適用於任何控件,直到選定時用戶不可見...

注意:除應用程序容器外,所有容器的默認創建策略是父容器的策略。應用程序容器的默認策略是auto。因此,在大多數情況下,View Stack控件的子項在被選中之前不會被創建。您無法將selectedChild屬性設置爲尚未創建的子項。

+0

謝謝你AndrewB! – medoix 2009-11-10 07:30:36

0

我認爲問題在於你將數據設置爲PageListRenderer,它看起來像一個類,而不是你想要的數據。

+0

PageListRenderer是mxml渲染器頁面。當前的代碼將渲染器顯示到面板()中;並工作,如果我指向數據提供商{Application.application.HomePage.myDG.seletecteditme.name}但是,這隻適用於單擊和數據網格中的項目,並加載時出現錯誤,並嘗試添加這些項目時,在數據網格中什麼都沒有被選中。因此,爲什麼我試圖把HTTP服務數據放入其中...或者我錯過了所有的東西一起哈哈,謝謝你的快速反應。 – medoix 2009-11-08 05:25:59

+0

我已經添加了一些我已經嘗試過以上...仍然不工作.. – medoix 2009-11-08 05:36:18

相關問題