博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
理解项目编辑器---part1:使用
阅读量:7082 次
发布时间:2019-06-28

本文共 4037 字,大约阅读时间需要 13 分钟。

转载 

 

我最近完成了-对列表控制的自定义,它们用于控制列表内容的显示格式。显示和渲染内容是一种十分有效的 UI 技术,而使用 Flex 您几乎可以完成想象得到的任何事。

这是有关 itemEditor 的新系列的第 1 部分,允许在列表控制中直接更改数据。第一篇文章讨论内联 itemEditor,可以在 MXML 文件中直接编写这些简单却十分有用的组件。该系列的后续文章将讨论更复杂的编辑、验证、事件以及将 itemRenderer 用作 itemEditor。

 

TextInput 编辑器

在列表控制中直接编辑十分便捷。想象一个仓库库存的 DataGrid,您可以在网格中直接调整内容而无需特殊弹出(请参阅图 1)。列表控制有一个内建编辑器 TextInput 控制,每当用户单击可编辑区域时会显示它,该区域包括行(对于列表)、分支(对于树)或单元格(对于 DataGrid)。您只需将列表控制的 editable 属性设置为 true。对于 DataGrid,将 DataGridColumn 的 editable 属性设置为 false 即可将某个列排除在可编辑范围以外。

itemEditor 允许在 DataGrid 中直接编辑

图 1.itemEditor 允许在 DataGrid 中直接编辑

itemEditor 与 itemRenderer 的不同之处在于只能看到 itemEditor 的一个实例,它在编辑的单元格上。仅当要编辑的单元格收到输入焦点后,才能看到 itemEditor。随后将隐藏 itemRenderer 并将 itemEditor 移到该位置、根据该区域大小做出调整并为它提供记录的数据。完成编辑(通过将焦点移到另一个位置)时,列表控制将新值从编辑器复制到 dataProvider 记录。

在图 1 显示的应用程序中,当用户单击“Part #”列的某个单元格时,dataProvider[row][dataField] 值将赋予 itemEditor (TextInput) 控制的 text 属性。完成编辑时,itemEditor (TextInput) 控制的 text 属性值将复制到dataProvider[row][dataField]。作为一个集合,dataProvider 根据更新调度事件。

虽然默认 TextInput 控制是个不错的编辑器,它实际上只适用于最简单的情况。例如,它适用于书名、作者姓名或产品编号等字符串值。如果需要更多控制或要验证用户输入,您就需要亲自动手。

Flex 控制用作 itemEditor

以下说明了如何创建一个只接受数值的 itemEditor:

restrict 和 maxChars 属性确保了 age 值限制为三位数的数值。

CheckBox 是用于 itemEditor 的另一个常见控制,因为它在编辑布尔值时很实用。图 2 显示了一个示例,它使用 CheckBox 编辑某个库存程序的“In Stock”列的值。

将 CheckBox 用作布尔值的 itemEditor

图 2.将 CheckBox 用作布尔值的 itemEditor

以下是它需要的代码:

在此例中,使用 labelFunction (inStockLabeler) 渲染该列中单元格的内容,它可以显示“Yes”、“No”、“In Stock”或“Out of Stock”等描述性字符串。itemEditor 属性设置为 mx.controls.CheckBox 类。DataGridColumn 还设有一个同样重要的属性:editorDataField。该字段表明完成编辑时用于取走值的 itemEditor 类的属性。此例中,它是 CheckBox 的 selected 属性。完成编辑时,DataGrid 将使用 CheckBox 的 selected 属性替换数据记录中的 inStock 属性。

此时,您可能会疑惑为什么 TextInput 的示例没有提供 editorDataField 属性。这是因为 editorDataField 的默认值是“text”,它恰巧是 TextInput 控制中保留该值的属性的名称。

可以将这种技术用于许多 Flex 控制。以下是用于使用 NumericStepper 的订单数量列的一个示例,如图 3 所示:

使用 NumericStepper 编辑数量

图 3.使用 NumericStepper 编辑数量

注意,editorDataField 是“value”-NumericStepper 保留控制当前值的属性。确保为 itemEditor 属性使用标准类名,否则编译器将找不到该类并将该行标为出错。

更复杂的编辑器

现在,您可能希望更进一步,这次没有现成的 Flex 控制。以下示例允许用户使用四个单独的四位数字段输入信用卡号(请参阅图 4):

图 4.通过四个单独字段编辑信用卡号

以下是它需要的代码:

这个内联 itemEditor 遵循与其他 itemEditor 相同的规则,将 editorDataField 命名为“value”。我们为这个 itemEditor 选择的组件是 HBox,它没有“value”属性。为了使这个 itemEditor 能正常运行,我们创建一个名为value 的 getter 函数,用于返回四个连接在一起的输入字段。当用户完成单元格编辑时,DataGrid 可以调用 itemEditor 的 value 属性,它将收到合并在一起的字段。

注意 data setter 函数中的 super.data = value。data 属性-实际上是 data getter 函数-广泛用于列表控制幕后以及框架的其他位置(更不用说您自己的代码)。如果不使用 super.data 设置数据的内部值,data getter 函数将返回一个空值,并且很可能导致应用程序崩溃。

您还会发现我覆盖了 data setter 函数。在这个函数中,我将信用卡号分到四个 TextInput 字段。这种技术用于显示待编辑数据。editorDataField 是用于检索新值的属性。

转载于:https://www.cnblogs.com/programmer-wind/archive/2012/05/21/2919502.html

你可能感兴趣的文章
hexo+css创建自己的blog(搭建)
查看>>
[译] 使用 Sami 生成 PHP 文档
查看>>
GitChat · Python | 零基础小白如何入门 Python 编程
查看>>
Spring、Spring Boot和TestNG测试指南 - 测试Spring MVC
查看>>
Memory Management and Circular References in Python
查看>>
用node+express+mongoDB实现用户登录注册模板
查看>>
微信小程序server-2-实现会话层
查看>>
vim下处理文档中的\r\n\t字符
查看>>
php常见术语
查看>>
看例子,学 Python(三)
查看>>
git心得
查看>>
头部组件header.vue
查看>>
golang - 收藏集 - 掘金
查看>>
Promise 的几种通用模式
查看>>
Kubelet源码分析(四) diskSpaceManager
查看>>
用Org-Mode和Jekyll写博客
查看>>
AlphaZero进化论:从零开始,制霸所有棋类游戏
查看>>
创新技术重塑未来物联网
查看>>
庖丁解牛!深入剖析React Native下一代架构重构
查看>>
架构师的狂欢—ArchSummit深圳2016等您来约
查看>>