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 として処理しますが、サービスからのリストにいくつかの項目を追加した後は、すべて正常に動作します。

(クレームが複数ある例) Oleg 2000 Test 2000

4

3 に答える 3

2

代わりに xmllist コレクションを使用してください。this.Claims = new XMLListCollection(event.result.my_claims.claim);一致するように Claims 関数を更新する必要があります

于 2009-08-12T14:57:38.970 に答える
1

私は以前にこれに出くわしたことがあります。XML構造のトラバースに関するAdobeのドキュメントは、その点で正確には明確ではありません。

彼らのドキュメントには、特定の名前の要素が複数ある場合は、配列の添字表記を使用してアクセスする必要があると記載されています。

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

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

次に、特定の名前の要素が1つしかない場合は、配列の添字表記を省略できます。

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

var firstBook:XML = testXML.book;

これは、配列型に強制しようとすると、単一の要素がXMLListではなくXMLNodeと見なされるため、機能しないことを意味します。

運が良ければ、<my_claims>ノード上の子の数を確認して、単一の要素をワープするArrayCollectionか、自動強制を使用して複数の要素を処理できるかを決定できます。

于 2009-08-12T15:09:31.743 に答える
1

次のように配列コレクションを設定してみてください。

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つしかない場合、このエラーが発生します

于 2009-08-12T14:58:26.207 に答える