2011-12-23 71 views
1

我正在嘗試創建某種類型的rangking。爲此,我使用一個多層次的XML,我用一個PHP文件創建。問題過濾XMLListCollection

<klassement>  
     <reeks> 
     <reeksId>1</reeksId> 
     <reeksNaam>3de klasse</reeksNaam> 
     <ploeg> 
      <ploegNaam>Foo</ploegNaam> 
      <goalsMade>60</goalsMade> 
      <points>12</points> 
     </ploeg> 
     <ploeg> 
      <ploegNaam>bar</ploegNaam> 
      <goalsMade>10</goalsMade> 
      <points>2</points> 
     </ploeg>  
     </reeks>  
     <reeks> 
     <reeksId>2</reeksId> 
     <reeksNaam>3de klasse res</reeksNaam> 
     <ploeg> 
      <ploegNaam>Foo res</ploegNaam> 
      <goalsMade>50</goalsMade> 
      <points>12</points> 
     </ploeg> 
     <ploeg> 
      <ploegNaam>bar</ploegNaam> 
      <goalsMade>40</goalsMade> 
      <points>8</points> 
     </ploeg>  
     </reeks> 
</klassement> 

依此類推,等等(你明白了)我在我的應用程序中使用httpService獲取信息。之後,我將這些信息放入XMLListCollection中。現在我試圖分開水平(可能不是正確的方式,但它的工作原理)。當我調試我可以看到,這2個新的變種都有正確的東西在裏面,但是當我說當datagrid的dataProvider必須是klassementKern時,我得到錯誤「將一個XML類型的值隱式強制轉換爲無關類型mx.collections:IList「

有人知道這是爲什麼,我該如何解決這個問題?

<?xml version="1.0" encoding="utf-8"?> 
<s:NavigatorContent xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx" 
        height="600" 
        skinClass="skins.ListContainerSkin" 
        creationComplete="httpKlassement.send()"> 
    <fx:Declarations> 
     <s:HTTPService id="httpKlassement" 
         url="http://localhost/flexScripts/klassement.php" 
         resultFormat="e4x" 
         result="showKlassement(event)"/> 
    </fx:Declarations> 
    <fx:Script> 
     <![CDATA[ 
      import mx.collections.XMLListCollection; 
      import mx.rpc.events.ResultEvent; 

      [Bindable] 
      private var klassement:XMLListCollection; 
      [Bindable] 
      private var klassementKern:XML; 
      [Bindable] 
      private var klassementReserve:XML; 


      protected function showKlassement(event:ResultEvent):void 
      { 
       klassement = new XMLListCollection(event.result.reeks); 
       klassementKern = klassement[0]; 
       klassementReserve = klassement[1]; 
      } 
     ]]> 
    </fx:Script> 
    <s:layout> 
     <s:VerticalLayout gap="10" paddingLeft="10" paddingTop="10" paddingRight="10" paddingBottom="10"/> 
    </s:layout> 

    <s:DataGrid width="760" height="230" dataProvider="{klassementKern}"> 
     <s:columns> 
      <s:ArrayCollection> 
       <s:GridColumn headerText="Ploeg" dataField="ploeg.ploegNaam"/> 
       <s:GridColumn headerText="WG" dataField="ploeg.aantalGespeeld"/> 
       <s:GridColumn headerText="W" dataField="ploeg.aantalGewonnen"/> 
       <s:GridColumn headerText="V" dataField="ploeg.aantalVerloren"/> 
       <s:GridColumn headerText="G" dataField="ploeg.aantalGelijk"/> 
       <s:GridColumn headerText="D+" dataField="ploeg.goalenGemaakt"/> 
       <s:GridColumn headerText="D-" dataField="ploeg.goalenTegen"/> 
       <s:GridColumn headerText="Punten" dataField="ploeg.punten"/> 
       <s:GridColumn headerText="DS" dataField="ploeg.doelpuntensaldo"/> 
      </s:ArrayCollection> 
     </s:columns> 
    </s:DataGrid> 
</s:NavigatorContent> 
+0

Entschuldi,炒麪Niederländisch北京時間nicht使腸道...... – SQLiteNoob 2011-12-24 04:46:54

+0

試圖通過創建XML文件data.xml中已提供。它的工作,沒有錯誤。請確認klassement.php提供了正確的xml,您可以在螢火蟲中檢查服務器響應。 – Diode 2011-12-24 19:00:58

+0

當我在chrome中打開php腳本時,它給了我正確的xml結構,當我在flash builder klassement中進行調試時,klassementKern和klassementReserve中充滿了正確的信息,但我沒有獲取datagrid中的信息。我今天下午把它放在網上。到php文件的鏈接是http://www.dehertoghnathalie2011.dreamhosters.com/flexScripts/klassement.php(域名是爲了別的,但我們必須將php文件放入同一個帳戶,新文件夾中)。現在我通過對數據網格和標題進行硬編碼來解決這個問題,但是httpsService – 2011-12-24 23:40:46

回答

0

我找到了解決辦法。我會在下面發佈我的新代碼,以防別人遇到同樣的問題。

<?xml version="1.0" encoding="utf-8"?> 
<s:NavigatorContent xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx" 
        creationComplete="httpKlassement.send()" 
        xmlns:components="components.*"> 

    <fx:Declarations> 
     <s:HTTPService id="httpKlassement" 
         url="http://www.dehertoghnathalie2011.dreamhosters.com/flexScripts/klassement.php" 
         result="showKlassement(event)" 
         fault="httpKlassement_faultHandler(event)"/> 
    </fx:Declarations> 
    <fx:Script> 
     <![CDATA[ 
      import mx.collections.IList; 
      import mx.collections.XMLListCollection; 
      import mx.controls.Alert; 
      import mx.rpc.events.FaultEvent; 
      import mx.rpc.events.ResultEvent; 

      [Bindable] 
      private var klassement:ArrayCollection; 
      [Bindable] 
      private var klassementKern:Object; 
      [Bindable] 
      private var kern:IList; 
      [Bindable] 
      private var klassementReserve:Object; 
      [Bindable] 
      private var reserve:IList; 


      protected function showKlassement(event:ResultEvent):void 
      { 
       klassement = event.result.klassement.reeks; 
       klassementKern = klassement[0]; 
       kern = klassementKern.ploeg; 
       klassementReserve = klassement[1]; 
       reserve = klassementReserve.ploeg; 
      } 

      protected function httpKlassement_faultHandler(event:FaultEvent):void 
      { 
       Alert.show(event.fault.faultString, "Foutmelding"); 
      } 

     ]]> 
    </fx:Script> 
    <s:layout> 
     <s:VerticalLayout gap="10" paddingLeft="10" paddingTop="0" paddingRight="10" paddingBottom="10"/> 
    </s:layout> 

    <s:DataGrid width="760" height="235" dataProvider="{kern}"> 
     <s:columns> 
      <s:ArrayCollection>   
       <s:GridColumn headerText="Ploeg" dataField="ploegNaam"/> 
       <s:GridColumn headerText="WG" dataField="aantalGespeeld"/> 
       <s:GridColumn headerText="W" dataField="aantalGewonnen"/> 
       <s:GridColumn headerText="V" dataField="aantalVerloren"/> 
       <s:GridColumn headerText="G" dataField="aantalGelijk"/> 
       <s:GridColumn headerText="D+" dataField="goalenGemaakt"/> 
       <s:GridColumn headerText="D-" dataField="goalenTegen"/> 
       <s:GridColumn headerText="Punten" dataField="punten"/> 
       <s:GridColumn headerText="DS" dataField="doelpuntensaldo"/> 
      </s:ArrayCollection> 
     </s:columns> 
    </s:DataGrid> 

    <s:DataGrid width="760" height="235" dataProvider="{reserve}"> 
     <s:columns> 
      <s:ArrayCollection>   
       <s:GridColumn headerText="Ploeg" dataField="ploegNaam"/> 
       <s:GridColumn headerText="WG" dataField="aantalGespeeld"/> 
       <s:GridColumn headerText="W" dataField="aantalGewonnen"/> 
       <s:GridColumn headerText="V" dataField="aantalVerloren"/> 
       <s:GridColumn headerText="G" dataField="aantalGelijk"/> 
       <s:GridColumn headerText="D+" dataField="goalenGemaakt"/> 
       <s:GridColumn headerText="D-" dataField="goalenTegen"/> 
       <s:GridColumn headerText="Punten" dataField="punten"/> 
       <s:GridColumn headerText="DS" dataField="doelpuntensaldo"/> 
      </s:ArrayCollection> 
     </s:columns> 
    </s:DataGrid> 
</s:NavigatorContent> 
0

對我的作品與harcoded XML恆定的,所以你可能會從服務器獲取別的東西:

<?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" 
    minWidth="955" minHeight="600" 
    creationComplete="showKlassement(event)"> 

    <fx:Script> 
     <![CDATA[ 
      import mx.collections.XMLListCollection; 
      import mx.events.FlexEvent; 

      private const MY_XML:XML = 
       <klassement>  
         <reeks> 
         <reeksId>1</reeksId> 
         <reeksNaam>3de klasse</reeksNaam> 
         <ploeg> 
          <ploegNaam>Foo</ploegNaam> 
          <goalsMade>60</goalsMade> 
          <points>12</points> 
         </ploeg> 
         <ploeg> 
          <ploegNaam>bar</ploegNaam> 
          <goalsMade>10</goalsMade> 
          <points>2</points> 
         </ploeg>  
         </reeks>  
         <reeks> 
         <reeksId>2</reeksId> 
         <reeksNaam>3de klasse res</reeksNaam> 
         <ploeg> 
          <ploegNaam>Foo res</ploegNaam> 
          <goalsMade>50</goalsMade> 
          <points>12</points> 
         </ploeg> 
         <ploeg> 
          <ploegNaam>bar</ploegNaam> 
          <goalsMade>40</goalsMade> 
          <points>8</points> 
         </ploeg>  
         </reeks> 
       </klassement>;     

      [Bindable] 
      private var klassement:XMLListCollection; 
      [Bindable] 
      private var klassementKern:XML; 
      [Bindable] 
      private var klassementReserve:XML; 

      private function showKlassement(event:FlexEvent):void { 
       klassement = new XMLListCollection(MY_XML.reeks); 
       klassementKern = klassement[0]; 
       klassementReserve = klassement[1]; 
      } 
     ]]> 
    </fx:Script> 
    <s:layout> 
     <s:VerticalLayout gap="10" paddingLeft="10" paddingTop="10" paddingRight="10" paddingBottom="10"/> 
    </s:layout> 

    <s:DataGrid width="760" height="230" dataProvider="{klassement}"> 
     <s:columns> 
      <s:ArrayCollection> 
       <s:GridColumn headerText="Ploeg" dataField="ploeg.ploegNaam"/> 
       <s:GridColumn headerText="WG" dataField="ploeg.aantalGespeeld"/> 
       <s:GridColumn headerText="W" dataField="ploeg.aantalGewonnen"/> 
       <s:GridColumn headerText="V" dataField="ploeg.aantalVerloren"/> 
       <s:GridColumn headerText="G" dataField="ploeg.aantalGelijk"/> 
       <s:GridColumn headerText="D+" dataField="ploeg.goalenGemaakt"/> 
       <s:GridColumn headerText="D-" dataField="ploeg.goalenTegen"/> 
       <s:GridColumn headerText="Punten" dataField="ploeg.punten"/> 
       <s:GridColumn headerText="DS" dataField="ploeg.doelpuntensaldo"/> 
      </s:ArrayCollection> 
     </s:columns> 
    </s:DataGrid> 
</s:Application> 
+0

會更好,但是您只能獲取一個數據網格嗎?我需要2個,一個是'克恩',一個是'儲備'。爲什麼它會顯示數據,如果你硬編碼,而不是當我使用httpService?我發現奇怪的:)(或者是因爲我在這= D新) – 2011-12-24 23:45:01

+0

也許是因爲HTTP服務提供了其他東西,如錯誤文本? – 2011-12-25 17:54:41

+0

沒有httpService給我正確的信息。鏈接到php文件(創建xml寫在上面的註釋中)。當我調試它時,我可以在所有變量中看到正確的信息 – 2011-12-25 20:17:13