Apache flex 筛选XMLListCollection时出现的问题
我在试着创造某种朗金。为此,我使用了一个使用php文件创建的多级xmlApache flex 筛选XMLListCollection时出现的问题,apache-flex,filtering,flash-builder4.5,Apache Flex,Filtering,Flash Builder4.5,我在试着创造某种朗金。为此,我使用了一个使用php文件创建的多级xml <klassement> <reeks> <reeksId>1</reeksId> <reeksNaam>3de klasse</reeksNaam> <ploeg> <ploegNaam>Foo</ploegNaam>
<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>
1.
3deKlasse
福
60
12
酒吧
10
2.
2.
克拉斯酒店
福瑞斯
50
12
酒吧
40
8.
等等,等等(你明白了)我在应用程序中使用httpService获得信息。之后,我将这些信息放入XMLListCollection中。现在,我正在尝试分离级别(可能不是正确的方法,但它是有效的)。当我调试时,我可以看到这两个新变量包含正确的内容,但是当我说datagrid的数据提供者必须是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>
使用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>
1.
3deKlasse
福
60
12
酒吧
10
2.
2.
克拉斯酒店
福瑞斯
50
12
酒吧
40
8.
;
[可装订]
私有var-klassement:XMLListCollection;
[可装订]
私有var-klassementKern:XML;
[可装订]
私有var-klassementReserve:XML;
私有函数showkAssement(事件:FlexEvent):无效{
klassement=newXMLListCollection(MY_XML.reeks);
klassementKern=klassement[0];
klassementReserve=klassement[1];
}
]]>
我找到了解决方案。我将在下面发布我的新代码,以防其他人有同样的问题
<?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>
Entschuldi,mein Niederländisch是nicht so gut…尝试用您提供的xml创建data.xml文件。它工作正常,没有错误。请确认klassement.php提供了正确的xml,您可以在firebug中检查服务器响应。当我在chrome中打开php脚本时,它提供了正确的xml结构,当我在flash builder klassement中调试时,klassementKern和klassementReserve填充了正确的信息,但我没有在datagrid中获得信息。我今天下午把它放到网上了。指向php文件的链接是(域名是其他名称,但我们必须将php文件放入同一个帐户,即新文件夹)。现在我通过硬编码datagrids和title解决了这个问题,但是使用HttpSServices会更好,但是你不是只得到一个datagrid吗?我需要两个,一个是“克恩”,一个是“预备队”。为什么它会显示数据,如果你硬编码它,而不是当我使用httpService?我觉得很奇怪:)(或者这是因为我对这个=D是新手)可能是因为httpService提供了其他东西,比如错误文本?没有httpService给我正确的信息。指向php文件(创建xml的文件)的链接写在上面的注释中。当我调试它时,我可以在所有变量中看到正确的信息