【发布时间】:2010-10-14 17:03:09
【问题描述】:
我有一个带有多个列(在 MXML 文件中定义)的 DataGrid 的 flex 应用程序,我需要“内省”网格列。也就是说,我需要编写一些 ActionScript 代码,给定 DataGrid 对象,这些代码可以确定有关网格的各种信息(更具体地说,是网格的列)。
特别是,如果一列只是纯文本输出,我并不真正关心它......但如果它有“可操作”控件(复选框、链接按钮等)我会关心。
首先,我假设包含“可操作”内容的列将位于
接下来我需要“深入”到结构中,将对应于
有人知道怎么做吗?
附:我知道 itemRenderer 中可能隐藏的内容几乎没有限制;如果我能深入挖掘,我愿意测试一些我期望的东西,而忽略其余的。
为了澄清一点,我被要求为现有应用程序提供第 508 节合规性(可访问性)。当然,这有很多部分,包括屏幕阅读器等......但第一步是确保应用程序可以在没有鼠标的情况下使用。
许多现有屏幕都有一种 UI 技术,该技术由带有项目渲染的 DataGrid 组成,这些渲染将诸如单选按钮和链接按钮之类的控件放置到单元格中(在列中一直使用相同类型的控件)。一切都很好,除了我找不到通过键盘与这些控件交互的方法。
所以,我修改了一个屏幕,使其具有一个弹出上下文菜单的热键,允许用户在可操作的项目中向上/向下箭头,然后按 ENTER 选择一个(切换复选框,按链接按钮等)。但这是特定于屏幕的,对于某些人来说更新屏幕(例如添加另一个可操作的列)并忽略菜单太容易了。
建议了一个更好的 (?) 方法:子类化数据网格,内省以找到可操作的列,自动构建菜单,现在我们要做的就是将 SuperDataGrid 换成 DataGrid,我们的屏幕将是符合 508 标准。
如果有人可以推荐一种更好的方法来使屏幕符合 508 标准(无需重新设计 UI)并且在每个屏幕上的工作量最小,我会全力以赴。
也许我说的不够清楚,因为你一直没有抓住重点,所以让我再试一次。
我不是在编写应用程序级代码...如果我是的话,我会确切地知道逻辑在做什么,并且能够以正常方式使用绑定数据。事实上,应用程序级代码确实以正常方式使用绑定数据。但这完全不是重点。
我正在尝试编写“基础架构级”代码:即在“低于”应用程序逻辑级别运行的代码。我正在尝试有效地向 DataGrids 添加一个 Adobe 应该包含但没有包含的功能。如果我能让这门课正常工作,那么就可以将它放到几十个屏幕上,而无需我作为课程作者,对这些屏幕或其中的逻辑一无所知。我能想象这种工作的唯一方法是查看数据网格,并在运行时发现其中潜伏着哪些类型的控件,以及它们可能绑定到的内容(实际上,我可能只执行 click=" foo()" 属性说要做,我不需要知道它们绑定到什么)。
这有意义吗?
有可能吗?
【问题讨论】:
标签: apache-flex actionscript-3