문제

XML 데이터를 반환하는 httpservice가 있습니다.

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

또한 반환 된 데이터를 사용하여 DataGrid를 가지고 있으며 완벽하게 작동하는 렌더러로 전달합니다.

<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>

XML 데이터의 각 결과에 대해 새로 생성하는 코드가 있습니다. panel() 그리고 렌더러.

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} 이 렌더러에서 DataGrid 렌더러에서와 같이. 대신 나는 각 필드마다 "정의되지 않은"것을 얻는다 ... 어떻게 통과 할 것인가? {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 기능. DataGrid의 정보를 여전히 가져오고 있으며 각 페이지의 데이터가 렌더링되지만 각 페이지는 각 페이지의 각 결과 대신 동일한 정보 (첫 번째 결과)를 가지고 있습니다 ...

도움이 되었습니까?

해결책

DataProvider가 HTTP 서비스에서 반환 된 데이터 로서이 데이터를 저장하는 데 사용되는 변수를 바인딩하는 것이 좋습니다. 그런 다음 모든 UI 구성 요소 날씨가 초기화되었거나 사용할 수 없습니다.

[Bindable]
var httpDataService:Object;

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

. }

Datagrid ...

dataprovider = "{httpDataService}"

다른 UI 구성 요소

dataprovider = httpdataservice

또는 귀하의 경우

 data = httpDataService

Flex는 Cotrols를 게으른 초기화로 가지고 있으므로 HTTP 요청을하는 시점에서 다른 컨트롤이 초기화되지 않으면 운이 좋지 않습니다. 다음은 View Stack Reference에서 나오지만 선택할 때까지 사용자에게 보이지 않는 컨트롤에 거의 적용됩니다 ...

참고 : 응용 프로그램 컨테이너를 제외한 모든 컨테이너의 기본 생성 정책은 상위 컨테이너의 정책입니다. 응용 프로그램 컨테이너의 기본 정책은 자동입니다. 따라서 대부분의 경우 View Stack Control의 어린이는 선택할 때까지 만들어지지 않습니다. 선택된 차일드 속성을 아직 생성되지 않은 어린이에게 설정할 수 없습니다.

다른 팁

문제는 데이터를 Pagelistrenderer로 설정 한 것입니다. 원하는 데이터 대신 클래스처럼 의심스럽게 보입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top