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>

对于 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 = dataviewstack_addChild函数中的。我仍然在数据网格中获取信息,并且我正在获取呈现的每个页面上的数据,但是每个页面都有相同的信息(第一个结果)而不是每个页面的每个结果......

4

2 回答 2

0

我认为问题在于您将数据设置为 PageListRenderer,它看起来可疑地像一个类而不是您想要的数据。

于 2009-11-08T05:18:43.500 回答
0

我建议不要让 dataProvider 成为从 http 服务返回的数据,而是绑定一个变量来存储这些数据。然后任何已初始化或未初始化的 UI 组件都可以使用它。

[Bindable]
var httpDataService:Object;

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

. }

数据网格...

dataprovider = "{httpDataService}"

其他 UI 组件

数据提供者 = httpDataService

或者在你的情况下

 data = httpDataService

请记住,Flex 将控制作为延迟初始化,因此如果您的其他控件未在您发出 http 请求时进行初始化,那么它就不走运了。以下来自视图堆栈参考,但几乎适用于在选择之前对用户不可见的任何控件...

注意:除Application容器外,所有容器的默认创建策略都是父容器的策略。应用程序容器的默认策略是自动。因此,在大多数情况下,View Stack 控件的子控件只有在它们被选中时才会创建。您不能将 selectedChild 属性设置为尚未创建的子项。

于 2009-11-09T01:46:31.617 回答