在Flex中访问项呈示器的属性

时间:2010-06-29 07:14:29

标签: flex adobe datagrid

我有一个带有组合框的数据网格,如;

   <mx:DataGrid editable="true"  x="72" y="10" id="dataGrid" creationComplete="dataGrid_creationCompleteHandler(event)" dataProvider="{getAllResult.lastResult}" height="178" width="896">
        <mx:columns>
            <mx:DataGridColumn headerText="STATUS" dataField="tooltip"/>
            <mx:DataGridColumn headerText="CUSTOM" editable="false" width="250" labelFunction="meAdnan"  >
                <mx:itemRenderer>
                    <fx:Component className="myEditor2">
                        <mx:VBox height="100%" >
                            <mx:ComboBox  id="pickState" labelField="attname" 
                                          dataProvider="{parentApplication.getAllResult2.lastResult}" 
                                         >
                            </mx:ComboBox>

                        </mx:VBox>
                    </fx:Component>                 
                </mx:itemRenderer>
            </mx:DataGridColumn>
        </mx:columns>
   </mx:DataGrid>

现在,当我想从itemrendered / combobox访问一个函数时,我使用parentApplication.funcName但是如何访问另一种方式,如何从itemrenderer外部访问组合框的属性?我试过myEditor2.pickState,但现在正在使用

1 个答案:

答案 0 :(得分:1)

parentApplication会引用主Application类,它可能并不总是您想要访问的内容 - 如果DataGrid位于扩展Canvas的组件中,该怎么办?使用outerDocumentitemRenderer访问拥有的文档。所以它应该是outerDocument.funcName

直接访问itemRenderer实例并不是一个好主意,因为滚动列表等时会重复使用项呈示器。因此,如果您获得对第一行的呈现器实例的引用,并向下滚动列表,那么相同的实例(您认为是第一行)现在可能代表第3行或第5行(或其他任何行),具体取决于您滚动的行数。正确的方法是覆盖public set data方法并根据数据从那里进行操作。

也就是说,您可以使用indexToItemRenderer方法获取对给定索引处的当前项呈示器的引用。将其转换为正确的类型(或将其分配给键入为Object的变量)并读取其pickState属性。