0

そのため、XMLファイルからデータグリッドにデータをロードしようとしています。プロジェクトはCairngormフレームワークにあります。XMLファイルはWebコンテンツフォルダーにあります。ServicesフォルダーにHTTPService呼び出しがあります。

<mx:HTTPService
        id = "getCategory"
        url = "assets/CategoryDept21Class1.xml"
        resultFormat = "e4x"
        />

あるdataGridで選択を行うと、別のdataGridにXMLファイルのデータが入力されることになっています。以下は、クラスのデータグリッドです。クラスをクリックすると、次のデータグリッドにデータが入力されることになっています。

<mx:DataGrid rowCount="10" enabled="true"
         dataProvider="{classList}"
         verticalScrollPolicy="on"
         click = "onClass()"
         id="classes" width="192" top="73" left="253" height="225">
        <mx:columns>
            <mx:DataGridColumn headerText="#" dataField="merchandiseClassNumber" width="50"/>
            <mx:DataGridColumn headerText="Class Name" dataField="merchandiseClassDescription" width="150"/>
        </mx:columns>
    </mx:DataGrid>

これらはトリガーされるメソッドです。

private function selectClass(evt:ResultEvent):void{
                //this.categoryList = new XMLListCollection(evt.result.resultSet);
                this.categoryList= evt.result.resultSet.MerchandiseAssortmentCategory;
                var request:AMTCategoryEvent;
                CairngormEventDispatcher.getInstance().dispatchEvent(request);

            }

            private function onClass():void{
                //Alert.show("you just clicked on a class ");
                var event:AMTCategoryEvent = new AMTCategoryEvent();
                CairngormEventDispatcher.getInstance().dispatchEvent(event);
            }

これが私のデリゲートでgetCategory()を定義した方法です

public function getCategory() : void
        {
            service = ServiceLocator.getInstance().getHTTPService("getCategory") as HTTPService;
            //Alert.show(service.url);
            var token : AsyncToken = service.send();
            token.addResponder(responder);
        }   

これがgetCategoryCommandにあるものです。

public function execute(event: CairngormEvent) : void{
            var categoryEvent: AMTCategoryEvent = event as AMTCategoryEvent;
            var deleg:Delegate = new Delegate(this);
            deleg.getCategory();
            //deleg.getCategory(categoryEvent.deptNumber, categoryEvent.classNum);
        }

        public function result(info:Object) :void{
            trace("Get Category: Success");
        //  __model.categoryList = new XMLList(info.result.resultSet.MerchandiseAssortmentCategory);
            var xmlbleh:XMLList=info.result.resultSet.MerchandiseAssortmentCategory.lastResult;
            mx.controls.Alert.show(xmlbleh.toXMLString());
            __model.categoryList = new XMLListCollection(XMLList(info.result.resultSet.MerchandiseAssortmentCategory.lastResult));

    }

何らかの理由で、xmlファイルのデータをデータグリッドに読み込んでいません。これはこのウェブサイトでの私の最初の質問です。私の質問が明確かどうかはわかりません。しかし、私はそれをどのように行うでしょうか?ありがとう :)

4

1 に答える 1

1

質問は十分に明確ですが、役に立つかもしれない追加情報があるかもしれません。一連の質問を通してそれらを解明しようとします。(これはおそらくコメントに属しますが、サイズ制限があり、面倒になる可能性があります)

1-デリゲートで HttpService の参照を取得できたことを願っています。

2-非同期サービス呼び出しが行われるまでデバッグできたことを願っています。

3-結果のコールバック関数が呼び出されることはないと思います。(またはその問題の障害)。

4- アプリケーションが Web サーバーにデプロイされていると仮定します。

私の仮定がすべて正しい場合、問題は URL の形成にある可能性があります。相対パスを提供しようとしていると思いますが、絶対 URL を提供しようとします。問題が URL にある場合は、サービス コールがバックグラウンドでログに記録され、404 などのエラー メッセージが表示されるはずです。

明白なエラー メッセージがない場合、これはセキュリティ エラーである可能性があります。クロスドメイン ポリシー ファイルを提供しましたか。

私の仮定が間違っている場合は、必要な情報を記入してください。また、Flex SDK のバージョンもお知らせください。

注: これをスタンドアロン アプリケーションとして実行している場合、Flash Builder で追加の属性を指定しない限り、ファイル システムからの読み取りを許可しないセキュリティ上の制約があります。

于 2011-06-27T20:23:09.140 に答える