1

当我检索只有 1 个节点(无重复节点)的 XML 并尝试存储在 ArrayCollection 中时,我收到此错误。- 当我有超过 1 个“名称”节点时......我没有收到错误。我的测试表明 XMLListCollection 也不起作用。

TypeError: Error #1034: Type Coercion failed: cannot convert "XXXXXX" to mx.collections.ArrayCollection.

此错误作为代码行发生:

myList= e.result.list.name;

为什么 ArrayCollection 不能与单个节点一起使用?我正在使用这个 ArrayCollection 作为组件的数据提供者 - 有没有我可以使用的替代方案,它既可以使用单个节点,也可以使用重复节点,也可以作为数据提供者工作?提前致谢!

代码:

[Bindable]
private var myList:ArrayCollection= new ArrayCollection();

        private function getList(e:Event):void{

            var getStudyLoungesService:HTTPService = new HTTPService();
            getStuffService.url = "website.com/asdf.php";
            getStuffService.addEventListener(ResultEvent.RESULT, onGetList);
            getStuffService.send();

        }

        private function onGetList(e:ResultEvent):void{

            myList= e.result.list.name;
        }
4

4 回答 4

1

这里的问题是,如果你只有一行 Flex 会抱怨,因为它不能将结果用作 arrayCollection。

我的解决方法是,您将要返回的数据的行数放入 XML 中:例如,我做了:

<list><nr_rows>3</nr_rows><name>...</name><name>...</name><name>...</name></list>

所以当我得到结果时,我会检查我得到了多少行(你可以得到从 MySQL 查询返回的行数mysql_num_rows

e.result.list.nr_rows

因此,如果这是一个,则将 Object 添加到 arrayCollection,如果有多个,则可以使用 result 并将其等于 AC(在这种情况下,项目是 AC):

if (event.result.list.nr_rows == '1'){
    myList.addItem(event.result.list.name);
} else {
    myList = event.result.list.name;
}
于 2010-05-20T06:59:28.280 回答
0

如果您不特别想将最终结果放入 ArrayCollection,则可以执行以下操作以将最终结果放入 XMLList 或 XMLListCollection。

1)设置HTTPService的resultFormat属性为e4x。

2) 在引用它时不要提及根 xml 标记名称。将输出引用为:myList:XMLList = e.result.name。

无论检索到的 XML 具有一个还是多个元素,这都有效。

于 2011-07-07T10:52:23.667 回答
0

我今天刚遇到这个问题,这让我想到了这个问题。我不确定您的用例是否与我的完全相同,但您可能想尝试showRoot="true"使用 mx:Tree。当只有一个项目时,它似乎强制显示根节点,并在多个项目时被忽略。

于 2013-05-08T21:22:11.607 回答
-1

添加行对象来获取 XML 节点的行可以工作,但我认为有一些更好的方法是,ActionScript 是否与 Java 一样强大?

于 2010-11-03T03:55:11.433 回答