Flex:在数据网格中使用之前处理 xml

发布于 2024-07-30 18:19:23 字数 809 浏览 3 评论 0原文

我有以下问题:

我的 Web 服务应用程序按以下顺序返回 xml 数据:

<my_claims>
  <claim>
    <opponent>Oleg</opponent>
    <rank>2000</rank>
  </claim>
</my_claims>

其中声明节点的数量可以是 0,1 等。

我如何正确处理从服务收到的数据。 目前,当我尝试将索赔数据存储为数组集合时,例如

this.Claims = event.result.my_claims.claim;

public function set Claims(array:ArrayCollection):void
{
    this.claims = array;
}

我收到错误:

TypeError:错误#1034:类型强制 失败:无法转换 mx.utils::ObjectProxy@1f94ca19 到 mx.collections.ArrayCollection。

据我了解,Flex 将其作为 XmlObject 处理,但是当我在服务列表中包含多个项目后,一切正常:(

带有多个声明的示例) 奥列格 2000年 测试 2000年

I have following problem:

My webservice application returns xml data in following order:

<my_claims>
  <claim>
    <opponent>Oleg</opponent>
    <rank>2000</rank>
  </claim>
</my_claims>

Where number of claim nodes, can be 0,1, and so on.

How I correctly handle, the data received from the service. Currently, when I am trying to store claims data as an array collection, e.g.

this.Claims = event.result.my_claims.claim;

public function set Claims(array:ArrayCollection):void
{
    this.claims = array;
}

I am getting the error:

TypeError: Error #1034: Type Coercion
failed: cannot convert
mx.utils::ObjectProxy@1f94ca19 to
mx.collections.ArrayCollection.

As far as I understand Flex handles this as an XmlObject, but after I have several items in the list from service, everything works fine:

(Example with several claims)

Oleg
2000

Test
2000

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

允世 2024-08-06 18:19:23

请改用 xmllist 集合。 this.Claims = new XMLListCollection(event.result.my_claims.claim); 您需要更新您的 Claims 函数以匹配

Use an xmllist collection instead. this.Claims = new XMLListCollection(event.result.my_claims.claim); You'll need to update your Claims function to match

和我恋爱吧 2024-08-06 18:19:23

尝试像这样设置 arraycollection:

if( event.result.my_claims.claim is ArrayCollection ){
  this.claims = event.result.my_claims.claim as ArrayCollection;

}
else{
  this.claims = new ArrayCollection( [event.result.my_claims.claim] );
}

如果结果只有 1 个项目,则会出现此错误

try setting your arraycollection like this:

if( event.result.my_claims.claim is ArrayCollection ){
  this.claims = event.result.my_claims.claim as ArrayCollection;

}
else{
  this.claims = new ArrayCollection( [event.result.my_claims.claim] );
}

If you result only has 1 item you get this error

鹿港小镇 2024-08-06 18:19:23

我自己以前也遇到过这种情况。 Adobe 关于遍历 XML 结构 的文档这点不太清楚。

他们的文档指出,如果有多个具有特定名称的元素,则必须使用数组索引表示法来访问它:

var testXML:XML = <base>
    <book>foo</book>
    <book>bar</book>
</base>

var firstBook:XML = testXML.book[0];

然后它继续说,如果只有一个具有特定名称的元素,那么您可以省略数组索引表示法:

var testXML:XML = <base>
    <book>foo</book>
</base>

var firstBook:XML = testXML.book;

这意味着当您尝试强制强制转换为 Array 类型时,它不起作用,因为它将单个元素视为 XMLNode 而不是 XMLList。

如果幸运的话,您可以检查 节点上的子级数量,并决定是否要扭曲 ArrayCollection 中的单个元素,或者是否可以使用自动强制来处理多个元素。

I've come across this myself before. Adobe's documentation on Traversing XML structures isn't exactly clear on the point.

Their documentation states that if there is more than one element with a particular name you have to use array index notation to access it:

var testXML:XML = <base>
    <book>foo</book>
    <book>bar</book>
</base>

var firstBook:XML = testXML.book[0];

Then it goes on to say that if there is only one element with a particular name then you can omit the array index notation:

var testXML:XML = <base>
    <book>foo</book>
</base>

var firstBook:XML = testXML.book;

This means that when you try and force coercion to an Array type it doesn't work since it sees the single element as an XMLNode and not an XMLList.

If you are lucky you can just check the number of children on your <my_claims> node and decide if you want to warp the single element in an ArrayCollection or if you can use the automatic coercion to work for multiple elements.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文