2009-05-22 8 views
0

私は、Atomフィードを返すHTTPServiceを持つFlex 3アプリケーションを持っています。私はそれから結果をキャッチし、それは私のDatagridのプロバイダであるarrayCollectionに格納します。 私の配列の "第1レベル"からデータにアクセスするのに問題はありませんが、その下に行くことはできません。 ない非常に明確なので、ここでいくつかのコードです:データグリッド内のarrayCollectionの子にアクセスできない

マイXML [それの一部]:

<entry> 
<title>Test 2</title> 
<id>http://collaboration.*****.com/collaboration/messaging/feeds/****/todo//7D6637D3E86B3ED3C12575B***8479</id> 
<link rel="alternate" href="notes:///C12575B4004***8/0/7D6637D3E86B3ED3C12575B6004E8479" type="application/vnd.lotus-notes"/> 
<published>2009-05-14T16:17:37+02:00</published> 
<updated>2009-05-14T16:17:56+02:00</updated> 
<clb:todo> 
<clb:uid>7D66***3ED3C12575B6004E8479</clb:uid> 
<clb:due>2009-05-31T12:01:00+02:00</clb:due> 
<clb:status>Not Started</clb:status> 
</clb:todo> 
</entry> 

マイデータグリッドコード:

 <mx:AdvancedDataGrid y="10" id="notesGrid" width="90%" height="243" designViewDataType="flat" x="10" selectionMode="multipleRows" dataProvider="{notesArray}" > 
      <mx:columns> 
       <mx:AdvancedDataGridColumn 
        headerText="TITRE" 
        dataField="title" 
        fontWeight="bold" 
       /> 
       <mx:AdvancedDataGridColumn headerText="STATUT" dataField="todo.status"/> 
      </mx:columns> 
     </mx:AdvancedDataGrid> 

"タイトル" 欄が正しくデータを示しているが、ステータス列は空です!私のアプリケーションをデバッグモードで起動すると、notesArrayのフォーマットが正しいことがわかります。値とtodo - > statusにアクセスできます...

私は数日間これに固執しています。助けてくれてありがとう! ありがとうございました。

答えて

0

それはこの種の問題に来るとき、私は従う一般的なルールは、この(ちょうどあなたが探しているすべてのものを取得していることを確認する)のような何かを行うことです。その後

import flash.utils.getQualifiedClassName; 

// As a general rule, I don't find it the best idea to access an object in 
// an IList (ArrayCollection, XMLListCollection, et al) by a dynamic property. 
// Especially when they are coming from XML, the best way to access everything 
// is through getItemAt. 
var len:int = todo.length; 
for(var i:int = 0; i < len; i++) 
{ 
    var item:* = todo.getItemAt(i); 
    trace(item, getQualifiedClassName(item)); 
} 

、私をこれで

<mx:AdvancedDataGridColumn headerText="STATUT" dataField="todo.status"/> 

<mx:AdvancedDataGridColumn headerText="STATUT" dataField="{ todo.status }"/> 

非常にO最初の試みは、これに取って代わることになりますften Flexはネストされたプロパティではまったく動作しませんが、角かっこを使用すると、その場所で見つかった値がより直接的な参照として提供されます。

また、ArrayCollectionでXMLListCollectionを使用する方が良いと思います。そうすれば、IListの通常のインデックスに頼るのではなく、名前で子を呼び出すことができます。

0

これは、「ステータス」ノードがあなたのタイトルとは異なる名前空間「clb」を使用しているという事実と関係している可能性があります。データにアクセスするには、名前空間を指定する必要があります。

.NET WebServiceからXMLデータを取得するとき、私は何か同様のことをしなければなりませんでした。それを理解するのに数日かかった。

あなたのXMLは次のようになります場合:

パッケージ { インポートMX:たとえば

private namespace clbNS = "CLB.data"; 

use namespace clbNS; 

<?xml version="1.0" encoding="utf-8"?> 
<atomFeed xmlns:clb="CLB.data"> 
    <entry> 
    <title>Test 2</title> 
    <id>http://collaboration.*****.com/collaboration/messaging/feeds/****/todo//7D6637D3E86B3ED3C12575B***8479</id> 
    <link rel="alternate" href="notes:///C12575B4004***8/0/7D6637D3E86B3ED3C12575B6004E8479" type="application/vnd.lotus-notes"/> 
    <published>2009-05-14T16:17:37+02:00</published> 
    <updated>2009-05-14T16:17:56+02:00</updated> 
    <clb:todo> 
    <clb:uid>7D66***3ED3C12575B6004E8479</clb:uid> 
    <clb:due>2009-05-31T12:01:00+02:00</clb:due> 
    <clb:status>Not Started</clb:status> 
    </clb:todo> 
    </entry> 
</atomFeed> 

あなたはHTTPServiceの結果を処理したActionScriptにこれを追加.rpc.events.ResultEvent;

public class handleAtomFeed 
{ 
    private namespace clbNS = "CLB.data"; 

    use namespace clbNS; 

    private function resultHandler(event:ResultEvent):void 
    { 
     // pares the XML and build your ArrayCollection 
    } 
} 

}

それは、それだけでうまくいくかもしれない撃た与えます!

+0

こんにちはベン、 チップありがとう。残念ながら、私はすでにアプリケーションで名前空間を使用しようとしましたが、それでも動作しませんでした。 名前空間がArrayCollectionに入れられたときに自動的にクリアされるようになりました... 問題はデータグリッド内のみです...私のASでAlert.show(notesArray [1] .todo.status)を実行すると、私は正しい値で警戒を得る! 配線済み:S – Florian

0

DataGridColumn/AdvancedDataGridColumnのdataFieldプロパティがネストされたプロパティ、つまり "todo.status"を自動的に解決しないことはかなり確信しています。ネストされたXML要素にアクセスするlabelFunctionを記述してみてください。

関連する問題