所以我需要在视图中显示动态生成的数据。
为此,我的想法是创建一个mxml文件,然后将其用作对象。填写ibject中的数据,然后使用addChild显示它。但即使在添加了所有数据之后。动态生成的mxml文件不会显示。
代码
BuyTogetherGrid.MXML
<?xml version="1.0" encoding="utf-8"?>
<mx:Box xmlns:mx="http://www.adobe.com/2006/mxml" width="80" height="60" xmlns:image="org.commodity.detail.image.*">
<mx:HBox>
<image:ImageBox id="buyTogetherImg"></image:ImageBox>
<mx:VBox id="textInfo">
<mx:Box id="commonNameBox">
<mx:Label id="commonName">
</mx:Label>
</mx:Box>
<mx:Box id="commonPriceBox">
<mx:Label id="commonPrice">
</mx:Label>
</mx:Box>
</mx:VBox>
</mx:HBox>
<mx:Script>
<![CDATA[
public function createGrid():void{
this.buyTogetherImg = new ImageBox();
this.commonName = new Label();
this.commonPrice = new Label();
}
]]>
</mx:Script>
</mx:Box>
这是我的MXMl文件。我的想法是创建这个mxml对象的对象。将数据添加到buyTogetherImg,CommonName,CommonPrice,然后使用addChild
我设置数据的部分
<mx:HBox id="buyTogetherBox" width="100%" borderColor="black">
</mx:HBox>
上层HBox是我将保留所有生成对象的容器
var buyTogetherBox : BuyTogetherGrid = new BuyTogetherGrid();
buyTogetherBox.createGrid();
for each(var item:cmListItem in commod.items){
if(item.dataFormat == 2){
buyTogetherBox.buyTogetherImg.imgData = item.value as ImageData;
} else if(item.dataFormat == 0){
buyTogetherBox.commonName.text = item.value.toString();
} else if(item.dataFormat == 3){
buyTogetherBox.commonPrice.text = StringUtil.numToStrPrice(item.value as Number);
}
}
this.buyTogetherBox.addChild(buyTogetherBox);
}
代码检查一些条件并添加数据。但是,buyTogetherBox不可见。但是如果我尝试像
那样的话this.buyTogetherBox.addChild(buyTogetherBox.buyTogetherImg);
然后我可以看到H:Box中的图像。
我是Flex的新手。也许我会错过一些东西
答案 0 :(得分:0)
您将保留静态创建的标签和图像控件实例,而不是创建新实例。基本上,整个createGrid()
函数是不必要的。您已经在MXML中创建了控件。只需使用它们创建新实例。
var grid:BuyTogetherGrid = new BuyTogetherGrid();
grid.addEventListener(FlexEvent.CREATION_COMPLETE, this.grid_creationCompleteHandler);
在同一个班级的其他地方......
private function grid_creationCompleteHandler(event:FlexEvent):void
{
// Set your properties here
}
答案 1 :(得分:0)
正如Pranav所说,创建MXML组件需要一些时间,如果您尝试立即评估它们,您将获得空指针异常,因为它们还不存在。一个快速而肮脏的解决方案是在BuyTogetherGrid.MXML中创建公共变量,然后将文本属性绑定到这些变量,例如
<?xml version="1.0" encoding="utf-8"?>
<mx:Box xmlns:mx="http://www.adobe.com/2006/mxml" width="80" height="60" xmlns:image="org.commodity.detail.image.*">
<fx:Script>
<![CDATA[
[Bindable] public var imageData:ImageData;
[Bindable] public var name:String;
[Bindable] public var price:String;
]]>
</fx:Script>
<mx:HBox>
<image:ImageBox id="buyTogetherImg" imgData={imageData}/>
<mx:VBox id="textInfo">
<mx:Box id="commonNameBox">
<mx:Label id="commonName" text="{name}">
</mx:Label>
</mx:Box>
<mx:Box id="commonPriceBox">
<mx:Label id="commonPrice" text="{price}">
</mx:Label>
</mx:Box>
</mx:VBox>
然后你做
buyTogetherBox.imageData = yourImageData;
buyTogetherBox.name = "Your Name";
buyTogetherBox.imageData = "Your price";
是的,删除不必要的createGrid()方法