我有一个带有itemrenderer组件的数据网格。 在itemrenderer中是一个按钮,应该在datagrid的每个第二行显示。 编译后看起来就像这样。
当我滚动数据网格时,按钮显示不正确,为什么?
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.FlexEvent;
[Bindable]
private var _ac:ArrayCollection = new ArrayCollection();
private function applicationComplete(e:FlexEvent):void{
for (var i:Number = 0; i < 100; i++ ) {
var b:Boolean = (i % 2) ? true : false;
_ac.addItem({text:'foo' + i, showBtn:b});
}
}
]]>
</fx:Script>
<mx:DataGrid id="datagrid" dataProvider="{_ac}" width="200">
<mx:columns>
<mx:DataGridColumn headerText="Text" dataField="text" />
<mx:DataGridColumn headerText="Edit" >
<mx:itemRenderer>
<fx:Component>
<mx:Canvas>
<fx:Script>
<![CDATA[
override public function set data(value:Object):void {
super.data = value;
if(value != null){
if (data.showBtn == false) editBtn.visible = false;
}
}
]]>
</fx:Script>
<s:Button id="editBtn" label="edit" />
</mx:Canvas>
</fx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>
答案 0 :(得分:1)
由于渲染器在滚动时重复使用,因此需要将其切换回可见状态。
更改
if (data.showBtn == false) editBtn.visible = false;
到
if (data.showBtn == false){
editBtn.visible = false;
}else{
editBtn.visible = true;
}
或者只是使用以下语法:
editBtn.visible = (data.showBtn as Boolean);