0

xml データを返す httpservice があります。

<mx:HTTPService id="httpService" url="data/Software.xml" resultFormat="e4x" result="httpResult_handler(event)" fault="Alert.show('XML Data Error')" />

また、返されたデータを使用し、それを完全に機能するレンダラーに渡すデータグリッドもあります。

<mx:DataGrid id="myDG" 
dataProvider="{httpService.lastResult.item}"
headerHeight="0"
editable="false"
width="100%" height="100%" 
rowHeight="50"
itemClick="switchView(myDG.selectedItem.name);">

<mx:columns>
<mx:DataGridColumn itemRenderer="com.xd.components.renderers.SoftwareListRenderer" />
</mx:columns>

</mx:DataGrid>

panel()xml データの結果ごとに、新しいレンダラーを作成するコードがいくつかあります。

private function viewstack_addChild(name:String):void {
            var p:Panel = new Panel();
            p.id = name;
            p.name = name;
            p.title = name;
            p.percentWidth = 100;
            p.percentHeight = 100;
            var randColor:uint = Math.random() * 0xFFFFFF;
            p.setStyle("backgroundColor", randColor);
            var pR:PageListRenderer = new PageListRenderer();
            var data:Object;
            //Do something to get the data to be displayed;
            pR.data = PageListRenderer;
            p.addChild(pR);
            myViewStack.addChild(p);
        }

ただし{data.name}、このレンダラーでは、データグリッド レンダラーと同じものを使用できません。{httpService.lastResult.item}代わりに、各フィールドに「未定義」が表示されます...ページレンダラーにも渡すにはどうすればよいですか?

編集:変更が行われました..

これは httpservice の結果ハンドラです。

        private function httpResult_handler(evt:ResultEvent):void {
            if (evt.result.software.item) {

                 data = XML(evt.result).descendants("item");
                    var item:Object = data;
                    for each(item in data) {
                        viewstack_addChild(item.name);
                    }
            }
         }

私も試してみました..

        private function httpResult_handler(evt:ResultEvent):void {
            if (evt.result.software.item) {

                 data = httpService.lastResult.item;
                     var item:Object = data;
                     for each(item in data) {
                        viewstack_addChild(item.name);
                    }
            }
         }

関数の も変更しpR.data = dataましたviewstack_addChild。私はまだデータグリッドの情報を取得しており、レンダリングされた各ページのデータを取得していますが、各ページの各結果ではなく、各ページに同じ情報 (最初の結果) があります...

4

2 に答える 2

0

dataProvider を http サービスから返されるデータにするのではなく、このデータを格納するために使用する変数をバインドすることをお勧めします。次に、初期化されているかどうかにかかわらず、UI コンポーネントの天気予報を使用できます。

[Bindable]
var httpDataService:Object;

function getData():void 
{
   hpptDataService = httpService.lastResult.item;

. }

データグリッド...

dataprovider = "{httpDataService}"

その他の UI コンポーネント

dataProvider = httpDataService

またはあなたの場合

 data = httpDataService

Flex には遅延初期化としてのコントロールがあることを覚えておいてください。したがって、http リクエストを作成した時点で他のコントロールが初期化されていない場合、それはうまくいきません。以下はビュー スタック リファレンスからのものですが、選択されるまでユーザーに表示されないコントロールにほとんど適用されます...

注: アプリケーション コンテナを除くすべてのコンテナのデフォルトの作成ポリシーは、親コンテナのポリシーです。アプリケーション コンテナのデフォルト ポリシーは auto です。したがって、ほとんどの場合、ビュー スタック コントロールの子は、選択されるまで作成されません。selectedChild プロパティを、まだ作成されていない子に設定することはできません。

于 2009-11-09T01:46:31.617 に答える
0

問題は、データを PageListRenderer に設定することだと思います。これは、必要なデータではなく、疑わしいクラスのように見えます。

于 2009-11-08T05:18:43.500 に答える