【问题标题】:Need to "introspect" innards of flex <mx:itemRenderer>需要“反省” flex <mx:itemRenderer> 的内部结构
【发布时间】:2010-10-14 17:03:09
【问题描述】:

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

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

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

接下来我需要“深入”到结构中,将对应于 的 AS 对象从 中拉出(我有这个),然后拉出对应的 AS 对象从 mx:DataGridColumn 中取出 (两种不同的方法;似乎都不是很有用),然后将对应于 的 AS 对象从 mx:itemRenderer 中拉出(如果有的话;我不清楚 mx:Component 是否真的创建了一个对象),最后将对应于 (或其他)的 AS 对象从 mx:Component 中拉出。

有人知道怎么做吗?

附:我知道 itemRenderer 中可能隐藏的内容几乎没有限制;如果我能深入挖掘,我愿意测试一些我期望的东西,而忽略其余的。


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

许多现有屏幕都有一种 UI 技术,该技术由带有项目渲染的 DataGrid 组成,这些渲染将诸如单选按钮和链接按钮之类的控件放置到单元格中(在列中一直使用相同类型的控件)。一切都很好,除了我找不到通过键盘与这些控件交互的方法。

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

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

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


也许我说的不够清楚,因为你一直没有抓住重点,所以让我再试一次。

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

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

这有意义吗?

有可能吗?

【问题讨论】:

    标签: apache-flex actionscript-3


    【解决方案1】:

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

    至于你试图解决的根本问题,你根本没有说出来。您只是在描述希望遵循特定解决方案,但没有描述潜在问题。你真正想要完成什么?不要谈论访问项目呈现或挖掘 DataGrid,但您想要对行进行什么交互或影响?问题是你的方法有点倒退,这就是为什么它没有奏效。

    【讨论】:

    • 我根本不需要影响渲染器,我只需要挖掘渲染器找到里面的复选框/等,我将通过正常方式影响。
    • @MarkV,好吧,不要那样做。在itemRenderer 绑定的data 中反映复选框的状态。
    • 状态无疑已经反映在一个数据元素中......但是我怎么知道有一个一个复选框,或者它绑定到什么数据元素,在一个generic 方式只给出了一个数据网格?找到控件的存在和/或它所绑定的数据是问题所在,而不是在我到达那里后对其进行操作。
    • @MarkV,如果状态反映在数据元素中,那么忽略就使用它。您想知道复选框是否被选中查看data["checked"] 或复选框绑定到的任何字段。来自项目渲染器的data 元素对应于网格的dataProvider 中的一行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    相关资源
    最近更新 更多