[英]Flex/ActionScript, PHP, and XML Error
我有一些使用Flex / ActionScript读取的XML。 当我加载XML时,Flash Builder给我一个错误,提示Error: Unknown Property: 'EventTitle'. at mx.collections::ListCollectionView/http://www.adobe.com/2006/actionscript/flash/proxy::getProperty()[E:\\dev\\4.y\\frameworks\\projects\\framework\\src\\mx\\collections\\ListCollectionView.as:870].
Error: Unknown Property: 'EventTitle'. at mx.collections::ListCollectionView/http://www.adobe.com/2006/actionscript/flash/proxy::getProperty()[E:\\dev\\4.y\\frameworks\\projects\\framework\\src\\mx\\collections\\ListCollectionView.as:870].
我将“ EventTitle”引用到的唯一位置是下面将其加载到列表中的位置。
当我从XML中删除<Invite>
部分时,它加载正常。 但是,一旦我再次添加它,就会给我错误。 下面是XML的结构:
<Invites>
<Invite>
<EventTitle>HelloWorld</EventTitle>
</Invite>
<Invite>
<EventTitle>HelloWorld2</EventTitle>
</Invite>
</Invites>
我正在使用PHP创建XML:
if ($_POST['method'] == "GET_INVITES") {
$sql = mysql_connect("localhost:8889", "---------------", "--------------");
if(!$sql) {
die('Could not connect:' . mysql_error());
}
mysql_select_db("Calendar", $sql);
$getInvitesQuery = mysql_query("SELECT * FROM `Invites` WHERE `To`='" . $_POST['userID'] . "'");
$result = "<Invites>";
$result .= "<Result>SUCCESS</Result>";
while($row = mysql_fetch_array($getInvitesQuery)){
$result .= "<Invite>";
$result .= "<FromID>" . $row['From'] . "</FromID>";
$result .= "<EventTitle>" . $row['Title'] . "</EventTitle>";
$result .= "<EventDay>" . $row['Day'] . "</EventDay>";
$result .= "<EventHour>" . $row['Hour'] . "</EventHour>";
$result .= "<EventMinute>" . $row['Minute'] . "</EventMinute>";
$result .= "</Invite>";
}
$result .= "</Invites>";
print($result);
}
我在Flex / ActionScript中使用HTTPService将XML文件从PHP文件加载到列表中。 这是代码:
<s:HTTPService id="getInvites" result="getInvitesResult(event)" method="POST" url="http://localhost/invite.php" useProxy="false">
<s:request xmlns="">
<method>GET_INVITES</method>
<userID>{my_id.text}</userID>
</s:request>
</s:HTTPService>
<s:List id="invites" x="5" y="295" width="310" change="rowSelected(event)">
<s:dataProvider>
<s:ArrayCollection source="{getInvites.lastResult.Invites.Invite.EventTitle}"/>
</s:dataProvider>
</s:List>
我一直在努力,并在2-3小时内想出解决方案。 任何帮助深表感谢。
谢谢,雅各布
我认为这里有几个问题:
不要在e4x表达式中包含XML对象的根标记
使用e4x表达式时,不应包含XML的根标记。 因此,尝试更改此行:
<s:ArrayCollection source="{getInvites.lastResult.Invites.Invite.EventTitle}"/>
至:
<s:ArrayCollection source="{getInvites.lastResult.Invite.EventTitle}"/>
作为替代方案,您可以向XML添加另一个根标签,以使原始表达式有效:
<root>
<Invites>
...
</Inivtes>
</root>
向列表提供适当的dataProvider
e4x表达式“ Invite.EventTitle”(在XML上使用时)将返回XMLList
对象。 这不适合用作列表的dataProvider。 列表的dataProvider
属性需要实现IList
接口的内容。 幸运的是,您所需要做的就是创建一个XMLListCollection
对象。 您将需要重构代码,以便可以创建此XMLListCollection
。
一种方法是将result
和fault
处理程序添加到HTTPService
。 实际上,这比使用lastResult
属性更好。 原因是当您的应用程序多次调用该服务时,使用lastResult
可能未引用正确的结果。
在result
事件处理程序中,您可以创建新的XMLListCollection
并将其设置在列表中:
<s:HTTPService id="getInvites" result="handleResult(event)" fault="handleFault(event)" resultFormat="e4x" ... />
private function handleResult(event:ResultEvent):void
{
var xml:XML = event.result as XML;
var xmlList:XMLList = xml.Invite.EventTitle; // an XML "array" of event titles
var xmlCollection:XMLListCollection = new XMLListCollection(xmlList);
// now set xmlCollection as the dataProvider for the list
invites.dataProvider = xmlCollection;
}
注意,在上文中,我还将HTTPService
的resultFormat指定为“ e4x”。
上面的代码是从内存中编码的,因此这里或那里可能有错误;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.