Actionscript 3 如何使用数据字段值更改itemrender按钮?
在我的Flex应用程序DataGrid中,如Actionscript 3 如何使用数据字段值更改itemrender按钮?,actionscript-3,apache-flex,flex3,mxml,Actionscript 3,Apache Flex,Flex3,Mxml,在我的Flex应用程序DataGrid中,如 <mx:DataGrid id="userListDataGrid" x="60" y="40" width="520" height="148" dataProvider="{schedule}" creationComplete="userListDataGrid_creationCompleteHandler(event)"> <mx:columns> <mx:DataGridColumn
<mx:DataGrid id="userListDataGrid" x="60" y="40" width="520" height="148" dataProvider="{schedule}" creationComplete="userListDataGrid_creationCompleteHandler(event)">
<mx:columns>
<mx:DataGridColumn dataField="courseDate" headerText="Date"/>
<mx:DataGridColumn dataField="courseName" headerText="Course Name"/>
<mx:DataGridColumn id="usertype" dataField="userType" headerText="User Type"/>
<mx:DataGridColumn headerText="Reminder">
<mx:itemRenderer>
<mx:Component>
<mx:HBox>
<mx:Button id="join" label="Join" borderColor="#5d93b9"
color="#04becf">
</mx:Button>
<mx:Button id="start" label="Start" borderColor="#5d93b9"
color="#04becf">
</mx:Button>
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>
收听itemRenderer的dataChange事件,并根据usertype值切换按钮的可见性。我在这里对您的数据类型进行了一些“猜测”,因为您没有提供示例元素。但是,大致如下:
<mx:DataGridColumn headerText="Reminder">
<mx:itemRenderer>
<mx:Component>
<mx:HBox dataChange="onDataChange()">
<mx:Script>
protected function onDataChange():void{
if(data.usertype == 'Host'){
join.visible = true;
start.visible = false;
} else {
join.visible = false;
start.visible = true;
}
}
</mx:Script>
<mx:Button id="join" label="Join" borderColor="#5d93b9"
color="#04becf">
</mx:Button>
<mx:Button id="start" label="Start" borderColor="#5d93b9"
color="#04becf">
</mx:Button>
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
受保护的函数onDataChange():void{
如果(data.usertype==“主机”){
join.visible=true;
start.visible=false;
}否则{
join.visible=false;
start.visible=true;
}
}
我在浏览器中编写了代码,因此它的语法可能不正确。谢谢您的重播。。。但是,如果我们在onDataChange()中编写警报框,并且不打印,则此代码不起作用。。。这就是我使用outerDocument.onDataChange()的方式。。。但在那个时候,join和start id是不可见的……我不明白你们说你们在使用“outerDocument.onDataChange()”是什么意思。dataChange方法需要位于渲染器内部;不在它之外;否则它将无法访问渲染器的任何子级。有时,单个渲染器将在设置数据之前初始化;因此,您可能需要检查数据是否为非空。在设置它们的可见性之前,还要检查join和start是否为非null。如果您需要更多,我将需要一个可运行的示例。我知道我的方法是正确的,因为我已经做了很多次了;但我的密码可能有问题。
<mx:DataGridColumn headerText="Reminder">
<mx:itemRenderer>
<mx:Component>
<mx:HBox dataChange="onDataChange()">
<mx:Script>
protected function onDataChange():void{
if(data.usertype == 'Host'){
join.visible = true;
start.visible = false;
} else {
join.visible = false;
start.visible = true;
}
}
</mx:Script>
<mx:Button id="join" label="Join" borderColor="#5d93b9"
color="#04becf">
</mx:Button>
<mx:Button id="start" label="Start" borderColor="#5d93b9"
color="#04becf">
</mx:Button>
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>