2011-12-23 3 views
1

나는 일종의 rangking을 만들려고합니다. 이를 위해, PHP 파일로 생성 한 다중 레벨 XML을 사용하고 있습니다.필터링 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 개의 새로운 vars에 올바른 정보가 있다는 것을 알 수 있지만 DataGrid의 dataProvider가 klassementKern이어야한다고 말하면서 "유형 XML 값의 암시 적 강제 변환이 발생했습니다. 관련이없는 형식 mx.collections : IList "

왜이 문제가 있으며 어떻게 해결할 수 있는지 알고 있습니까? harcoded XML 상수와 나를 위해

<?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

+0

는 귀하가 제공 한 XML을 파일 인 data.xml을 만들어 시도 ... 직감. 그것의 작동, 오류가 없습니다. klassement.php가 올바른 XML을 제공하고 있는지 확인하십시오. 방화벽 버그에서 서버 응답을 확인할 수 있습니다. – Diode

+0

크롬에서 php 스크립트를 열면 올바른 XML 구조가 생깁니다. 플래시 빌더 klassement에서 디버깅 할 때 klassementKern 및 klassementReserve가 올바른 정보로 채워지지만 DataGrid의 정보를 얻지 못합니다. 오늘 오후에 온라인에 올렸어. php 파일에 대한 링크는 http://www.dehertoghnathalie2011.dreamhosters.com/flexScripts/klassement.php입니다 (도메인 이름은 다른 것이었지만 PHP 파일을 같은 계정, 새 폴더에 넣어야했습니다). 지금은 데이터 격자 및 제목을 하드 코딩하여 해결했지만 httpsService –

답변

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

작품, 당신은 아마 서버에서 다른 것을 얻을 수있는, 그래서 :

<?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

으로 더 좋을 것입니다. 단 하나의 DataGrid를 얻지 못합니까? 나는 'Kern'과 'Reserve'를 위해 2, 1이 필요합니다. 그리고 httpService를 사용할 때가 아니라 하드 코드하면 왜 데이터를 보여줄 수 있습니까? 나는 이상한 것을 발견한다. (또는이 때문에 D = –

+0

이기 때문에) httpService가 오류 텍스트와 같은 다른 것을 제공하기 때문에 어쩌면? –

+0

httpService가 올바른 정보를 제공하지 않습니다. php 파일에 대한 링크 (위의 주석에 xml을 작성함)가 있습니다. 디버깅 할 때 모든 변수에서 올바른 정보를 볼 수 있습니다. –