Flex的设置数据提供程序为的itemRenderer
-
18-09-2019 - |
题
我有一个返回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 = data
功能改变了viewstack_addChild
。
我得到的数据网格的信息还是和我得到不过呈现在每一页上的数据每个页面都有相同的信息(第一个结果),而不是每个结果的每一页...
解决方案
我建议不使dataProvider中来自HTTP服务返回的数据的变量,而绑定到用于存储该数据。然后任何UI组件天气初始化或不可以使用它。
[Bindable]
var httpDataService:Object;
function getData():void
{
hpptDataService = httpService.lastResult.item;
。 }
...数据网格
dataprovider = "{httpDataService}"
其他UI组件
的dataProvider = httpDataService
或在您的情况
data = httpDataService
记住的Flex有cotrols为延迟初始化,所以如果你的其他的控制是不是在您让您的http请求是出于运气点初始化。 以下是从视图堆栈参考但几乎适用于不是直到选择的用户可见的任何控制...
注:所有容器默认创建的政策,除了应用程序容器,是父容器的政策。对于应用程序容器的默认政策是汽车。在大多数情况下,因此,不,直到它们被选择创建视图栈控制的孩子。你可以不selectedChild属性设置为尚未创建一个孩子。的
其他提示
我认为这个问题是你设置数据是PageListRenderer,看起来很像一类,而不是你想要的数据。