如何一般地访问flex组件id?

时间:2010-07-16 13:09:32

标签: flex advanceddatagrid swfloader

我在AS文件中有一些通用功能,如复制,粘贴等。我想用它们来编辑嵌入在一个应用程序中的不同mxml应用程序中的数据。如果我将子组件的id作为其中一个事件中函数的参数传递,我将该值作为null或父应用程序名称。但我希望子组件的id访问值。请帮忙。

更新

请查看以下代码段:

epfGateTask.mxml

..
<mx:AdvancedDataGrid id="task" resizableColumns="true" initialize="populateArray()"
 dataProvider="{gateTaskList}" width="100%" height="100%" horizontalScrollPolicy="auto" 
verticalScrollPolicy="auto" selectionMode="multipleCells" editable="true" itemEditBeginning="{editStart(event,task)}" paddingTop="0" paddingBottom="0" lockedColumnCount="5" rowCount="27"  sortableColumns="false" liveScrolling="false" variableRowHeight="true" headerWordWrap="true" >
<mx:columns>
<mx:AdvancedDataGridColumn id="gateName" dataField="gateName" headerText="" width="137" wordWrap="true" textAlign="center" editable="false"/>
...

MenuBarUtilities.as

...
var dg_ID :Object ; 

public function cut(event: Event)
{

    if(selectedData != null && selectedData!="")
    {
        copy(event);
        dg_ID.selectedItem[columnName]= "";
        dg_ID.invalidateList();
    }
}

public function editStart(event:AdvancedDataGridEvent,id:Object):void
{   
    dg_ID = id;
    columnIndex  = event.columnIndex;
    columnName = id.columns[columnIndex].dataField;
    var dataField: String = id.selectedItem[columnName];
    selectedData = dataField;       
}
...

此函数用于将数据字段的值保存在临时变量中,以便在复制和粘贴时可以粘贴该值。 在这里,从上面可以看到'id'是(dataGrid id)从AdvancedDataGridEvent传递的内容。现在,在执行主mxml并选择datagrid单元格来剪切值时,会显示空引用错误。函数中的id的值为“epfProgram”,这是主要的mxml名称。并且dg_ID显示为null。 同样,另一个mxml需要相同的功能。使用SWFLoader将这两个mxml放入主mxml(epfProgram.mxml)中。复制,粘贴等按钮出现在主mxml中。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

如果没有看到任何代码,我建议您在事件中发送对组件的引用,而不是发送id。实际上,现在我说你可以完全跳过它并通过你在事件监听器中收到的事件的currentTarget属性访问发送组件。