需要“内省”flex的内部<mx:itemrenderer> </mx:itemrenderer>

时间:2010-10-14 17:03:10

标签: flex actionscript-3

我有一个带有多个列的DataGrid的flex应用程序(在MXML文件中定义),我需要“内省”网格列。也就是说,我需要编写一些ActionScript代码,在给定DataGrid对象的情况下,可以确定网格的各种内容(更具体地说,是网格的列)。

特别是,如果列只是纯文本输出,我并不关心它......但如果它内部有“可操作”控件(复选框,链接按钮等),我会这样做。

首先,我假设包含“可操作”内容的列将在&lt; mx:itemRenderer&gt;内。标签(否则它只是纯文本);如果这不正确,请告诉我。

接下来我需要“挖掘”结构,拉出对应于&lt; mx:DataGridColumn&gt;的AS对象。超出&lt; mx:DataGrid&gt; (我已经得到了这个),然后拉出对应于&lt; mx:itemRenderer&gt;的AS对象。超出mx:DataGridColumn(两种不同的做法;看起来都不是很有用),然后拉出对应于&lt; mx:Component&gt;的AS对象。超出mx:itemRenderer(如果有的话;我不清楚mx:Component是否实际创建了一个对象),最后拉出对应于&lt; mx:LinkBut​​ton&gt;的AS对象了。 (或其他)mx:Component。

有谁知道怎么做?

P.S。我知道在itemRenderer中潜伏的东西几乎没有限制;如果我可以挖掘那么远,我愿意测试一些我期望的东西而忽略其余的东西。


为了澄清一点,我被要求提供现有应用程序的Section 508合规性(可访问性)。当然,有许多部分,包括屏幕阅读器等......但最初的步骤之一是确保可以在没有鼠标的情况下使用该应用程序。

许多现有的屏幕都有一个UI技术,其中包含一个带有项目渲染的DataGrid,它将控件(如单选按钮和链接按钮等)置于单元格中(相同类型的控件一直向下)。一切都很好,除了我无法通过键盘与这些控件进行交互。

因此,我修改了一个屏幕以显示一个热键,弹出一个上下文菜单,允许用户在可操作的项目中向上/向下箭头,然后按ENTER键选择一个(切换复选框,按链接按钮等)。但这是特定于屏幕的,有人更新屏幕(例如添加另一个可操作的列)并忽略菜单会很容易。

建议采用更好的(?)方法:子类化数据网格,内省找到可操作的列,自动构建菜单,现在我们要做的就是为DataGrid换掉SuperDataGrid,我们的屏幕将是508符合。

如果有人可以推荐一种更好的方法来使屏幕符合508标准(无需重新设计用户界面)并且每屏幕工作量最小,我就全力以赴。


也许我不够清楚,因为你总是忽略这一点,所以让我再试一次。

我不是在编写应用程序级代码......如果我是,我会确切地知道逻辑在做什么,并且我能够以正常方式使用绑定数据。实际上,应用程序级代码DOES以正常方式使用绑定数据。但这完全不是重点。

我正在尝试做的是编写“基础架构级”代码:即在应用程序逻辑级别“以下”运行的代码。我正在尝试为Adobe应该包含的DataGrids有效地添加一个功能,但没有。如果我能让这个课程正常工作,那么就可以将它放到几十个屏幕上而不是我,作为课程作者,知道任何关于这些屏幕或其中的逻辑。我可以想象这个工作的唯一方法是查看数据网格,并在运行时发现潜伏在其中的控件类型,以及它们可能绑定的内容(实际上,我可以执行任何单击=“ foo()“属性说要做,我不需要知道它们绑定的是什么。”

这有意义吗?

有可能吗?

1 个答案:

答案 0 :(得分:0)

项目渲染通过其data属性与外部世界进行交互。他们应该根据需要呈现数据,并根据需要对data进行更改。它们不应该到达外面,您不应该试图直接影响项目渲染器。

就你想要解决的根本问题而言,你根本就没有说过。您只是想描述一个特定解决方案的愿望,但没有描述潜在的问题。你到底想要完成什么?不要谈论访问项目渲染或挖掘DataGrid,但是你想要对行进行什么交互或影响?问题是你的方法有些倒退,这就是为什么它没有成功。