如何访问另一个组件中一个 mxml 中的数据网格?
Posted
技术标签:
【中文标题】如何访问另一个组件中一个 mxml 中的数据网格?【英文标题】:how to access the datagrid in one mxml in another component? 【发布时间】:2010-12-05 05:38:21 【问题描述】:我的 mxml 文件中有一个数据网格,例如 samp.mxml。
<mx:DataGrid id="taskDataGrid" dataProvider="initDG" variableRowHeight="true"
editable="true" paddingBottom="1" paddingTop="1" >
<mx:columns>
<mx:DataGridColumn dataField="Select"
editable="true"
rendererIsEditor="true"
itemRenderer="mx.controls.CheckBox"
editorDataField="selected" />
<mx:DataGridColumn dataField="TaskName"
editable="true"
rendererIsEditor="true"
itemRenderer="components.taskComponent"/> //i call the component.
<mx:DataGridColumn dataField="TaskId"
itemRenderer="mx.controls.TextInput" />
</mx:columns>
</mx:DataGrid>
在数据网格的其中一列中,我必须显示一个文本输入框和一个按钮。所以我将该功能编写为一个单独的组件,即 taskComponent.mxml
<mx:TextInput id="TaskName"
editable="true"
text="data.TaskName"
mouseDown="addTaskRow(event);"
/>
<mx:Button id="searchTask" label="..." click="showPopUp();"/>
现在,如果我单击组件中的文本输入框,我希望添加另一个数据行。早些时候我有它,如果我点击数据网格,就会添加一行。所以我在 samp.mxml 本身中编写了函数。这是添加数据网格行的功能。
private function addTaskRow(event:MouseEvent):void
taskDataGrid.dataProvider.addItem(
);
taskDataGrid.height += 30;
如果我尝试在 taskComponent 文件中编写函数,它会显示错误“未定义属性 taskDataGrid 的访问”。 taskComponent中的datagrid如何使用?
【问题讨论】:
【参考方案1】:将trace(this.owner);
添加到文本输入的 mouseDown 并查看它跟踪的内容。如果它跟踪 [object DataGrid] 之类的内容,您可以使用 DataGrid(this.owner)
访问 taskDataGrid。
【讨论】:
很抱歉打扰您,但我对 Flex 很陌生。我添加了 MouseDown="trace(this.owner);"。但是在哪里可以看到它的踪迹。我正在使用 FlexBuilder。 调试应用程序(按 F11)并单击文本输入。 Alt-tab 到 Flex Builder,进入窗口菜单并选择控制台。 (或者从 window|perspectives 中选择 flex 调试透视图)。将显示控制台面板。 我得到 iqa0.VBox4.taskPanel.taskDataGrid 我使用了 taskDataGrid(this.owner).dataProvider.addItem();... 我仍然得到“调用可能未定义的方法 taskDataGrid” 使用DataGrid(this.owner).dataProvider.addItem();
括号()用于类型转换。这里DataGrid是类型名,taskDataGrid就是变量名。【参考方案2】:
你不想那样做。据推测,框和按钮添加了一个新任务。您想要做的是在 initDG 变量中添加一个新行。它应该是一个 ArrayCollection。然后,添加后,网格将刷新以显示新数据。
您不希望您的 UI 成为数据。您希望它反映数据。专注于修改数据模型并简单地让网格反映它。您可能需要更深入地研究 Flex。专注于了解有关 DataGrid、dataProvider 以及绑定如何与 ArrayCollections 一起工作的更多信息。
【讨论】:
【参考方案3】:查看 Peter Ent 关于项目渲染器的文章。它提供了非常丰富的信息,并让您了解一些最佳实践。我多次提到这个,我发现他说的很多东西都非常有用......
http://www.adobe.com/devnet/flex/articles/itemrenderers_pt1.html
本文特别向您展示了如何使用 ListData 访问父组件 - 正确的方法:
http://www.adobe.com/devnet/flex/articles/itemrenderers_pt3_02.html
ListData 是访问父级的关键。另一种选择是从渲染器调度自定义事件。
【讨论】:
@Eric 您能否解释/链接到说明为什么不应使用 this.owner 的内容?以上是关于如何访问另一个组件中一个 mxml 中的数据网格?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 adobe flex 中的 actionscript 变量访问 mxml 组件?
如何在 flex-edited 中从另一个 mxml 组件调用 mxml 组件
在 Flex 中,如何在 MXML 应用程序文件和 MXML 组件文件之间来回传递 var 对象