Actionscript 3 如何使用数据字段值更改itemrender按钮?

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

在我的Flex应用程序DataGrid中,如

<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>