`

理解 Flex itemEditor-第 1 部分:内联 itemEditor

    博客分类:
  • Flex
阅读更多

理解 Flex itemEditor-第 1 部分:内联 itemEditor

转载 http://www.adobe.com/cn/devnet/flex/articles/itemeditors_pt1.html

 

我最近完成了一个有关 itemRenderer 的系列-对列表控制的自定义,它们用于控制列表内容的显示格式。显示和渲染内容是一种十分有效的 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:

<mx:DataGrid x="46" y="270" editable="true" dataProvider="{employeeDB}">
     <mx:columns>
          <mx:DataGridColumn headerText="Name" dataField="name"/>
          <mx:DataGridColumn headerText="Position" dataField="position"/>
          <mx:DataGridColumn headerText="Age" dataField="age">
               <mx:itemEditor>
                    <mx:Component>
                         <mx:TextInput restrict="0-9" maxChars="3" />
                    </mx:Component>
               </mx:itemEditor> 
          </mx:DataGridColumn>
     </mx:columns>
</mx:DataGrid>

restrictmaxChars 属性确保了 age 值限制为三位数的数值。

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

将 CheckBox 用作布尔值的 itemEditor

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

以下是它需要的代码:

<mx:DataGrid x="531" y="273" editable="true" dataProvider="{inventoryDB}">
     <mx:columns>
          <mx:DataGridColumn headerText="Product" dataField="product"/>
          <mx:DataGridColumn headerText="Part #" dataField="part"/>
          <mx:DataGridColumn headerText="In Stock?" dataField="inStock"
               labelFunction="inStockLabeler"
               itemEditor="mx.controls.CheckBox" editorDataField="selected" /> 
           <mx:DataGridColumn headerText="Quantity" dataField="quantity"/>
     </mx:columns>
</mx:DataGrid>

在此例中,使用 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 所示:

<mx:DataGrid x="531" y="82" editable="true" dataProvider="{inventoryDB}">
     <mx:columns>
          <mx:DataGridColumn headerText="Product" dataField="product"/>
          <mx:DataGridColumn headerText="Part #" dataField="part"/>
          <mx:DataGridColumn headerText="In Stock?" dataField="inStock"/>
          <mx:DataGridColumn headerText="Quantity" dataField="quantity"
               itemEditor="mx.controls.NumericStepper" editorDataField="value"/>
     </mx:columns>
</mx:DataGrid>

使用 NumericStepper 编辑数量

图 3.使用 NumericStepper 编辑数量

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

更复杂的编辑器

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

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

以下是它需要的代码:

<mx:DataGrid x="46" y="463" editable="true" dataProvider="{accountDB}" width="302">
     <mx:columns>
          <mx:DataGridColumn headerText="Account" dataField="account" width="100"/>
          <mx:DataGridColumn headerText="Credit Card" dataField="ccard" editorDataField="value">
               <mx:itemEditor>
                    <mx:Component>
                         <mx:HBox>
                              <mx:Script>
                                   <![CDATA[
                                        public function get value() : String
                                        {
                                             return part1.text+part2.text+part3.text+part4.text;
                                        }
                                        override public function set data(value:Object):void
                                        {
                                             super.data = value;
                                             part1.text = value.ccard.substr(0,4);
                                             part2.text = value.ccard.substr(4,4);
                                             part3.text = value.ccard.substr(8,4);
                                             part4.text = value.ccard.substr(12,4);
                                        }
                                   ]]>
                              </mx:Script>
                              <mx:TextInput id="part1" maxChars="4" restrict="0-9" width="40" />
                              <mx:TextInput id="part2" maxChars="4" restrict="0-9" width="40" />
                              <mx:TextInput id="part3" maxChars="4" restrict="0-9" width="40" />
                              <mx:TextInput id="part4" maxChars="4" restrict="0-9" width="40" />
                         </mx:HBox>
                    </mx:Component>
               </mx:itemEditor>
          </mx:DataGridColumn>
     </mx:columns>
</mx:DataGrid>

这个内联 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 是用于检索新值的属性。

分享到:
评论

相关推荐

    Flex itemEditor详解

    Flex中支持在展示容器中编辑数据,并且可以为数据指定编辑器,本文将对编辑器做详细说明

    item-editor:用于编辑OTB项目文件的编辑器

    什么是OTItemEditor? OTItemEditor 是一个用于编辑 OpenTibia 服务器和工具使用的 OTB 数据文件的程序,用于将客户端使用的项目 ID 映射到服务器和工具使用的一组一致的 ID。 这是必要的,因为 CIPSoft 会在每个...

    flex3的cookbook书籍完整版dpf(包含目录)

    第一章.Flex与ActionScript基础(3) 1.1节.用FlexBuilder创建Flex项目 1.2节.用FlexBuilder创建Flex库项目 1.3节.创建ActionScript项目 1.4节.在FlexBuilder中设置MXML编译器选项 1.5节.在FlexBuilder外部编译Flex...

    D2 1.10物品修改器.rar

    D2 1.10物品修改器.rar

    【图像融合】加权算法高分辨率和低分辨率图像融合(含清晰度)【含Matlab源码 4405期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    源代码-BASISBBS最易ASP论坛 v1.0.7.zip

    源代码-BASISBBS最易ASP论坛 v1.0.7.zip

    【图像去噪】高斯滤波+均值滤波+中值滤波+双边滤波图像去噪(含信噪比)【含Matlab源码 2747期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    华为2019创新大赛的工程文件+各种模型的backbone和tricks

    华为大模型 华为2019创新大赛的工程文件+各种模型的backbone和tricks 华为2019创新大赛的工程文件+各种模型的backbone和tricks 华为2019创新大赛的工程文件+各种模型的backbone和tricks 华为2019创新大赛的工程文件+各种模型的backbone和tricks 华为2019创新大赛的工程文件+各种模型的backbone和tricks 华为2019创新大赛的工程文件+各种模型的backbone和tricks

    【脑肿瘤检测】 GUI SOM脑肿瘤检测【含Matlab源码 2322期】.zip

    【脑肿瘤检测】 GUI SOM脑肿瘤检测【含Matlab源码 2322期】

    顾客满意度调查表.doc

    顾客满意度调查表.doc

    Excel模板个人简历优雅简约单页30.docx

    Excel模板个人简历优雅简约单页30.docx

    响应式web前段开发程序源代码

    响应式web前段开发程序一书的所有源代码,PPT,课件,免费不要钱,有需要的下载即可,我是好人!给我点赞,让更多的大学生看见,大学生help大学生!

    HC400-20标定版描述文件及标定版ps文件

    HC400-20标定版描述文件及标定版ps文件

    光伏出力、风电出力基于skleran算法实现对光伏和风电输出进行准确预测Python源码+详细注释+报告.zip

    【备注】 1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通。 2.主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 光伏出力、风电出力基于skleran算法实现对光伏和风电输出进行准确预测Python源码+详细注释+报告.zip 光伏出力、风电出力基于skleran算法实现对光伏和风电输出进行准确预测Python源码+详细注释+报告.zip 光伏出力、风电出力基于skleran算法实现对光伏和风电输出进行准确预测Python源码+详细注释+报告.zip 光伏出力、风电出力基于skleran算法实现对光伏和风电输出进行准确预测Python源码+详细注释+报告.zip

    【交通标志识别】 GUI BP神经网络雾霾天气交通标志识别(带面板)【含Matlab源码 1771期】.zip

    【交通标志识别】 GUI BP神经网络雾霾天气交通标志识别(带面板)【含Matlab源码 1771期】

    【图像加密】 GUI混沌系统图像加密解密【含Matlab源码 147期】.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    stm32八路灰度循迹小车

    STM32F103

    Excel模板Github上10个值得学习的Springboot开发项目.pdf

    Spring Boot 是一个开源的 Java 框架,用于简化 Spring 应用程序的初始搭建以及开发过程。它提供了许多默认配置,使得开发者能够更快速地构建应用。以下是一些 Spring Boot 的开发案例,这些案例展示了如何使用 Spring Boot 来构建不同类型的应用程序。 Web 应用程序: 博客系统:可以使用 Spring Boot 创建一个简单的博客系统,包括用户注册、登录、发布文章、评论等功能。利用 Spring Boot 的自动配置特性,可以快速搭建起一个 Web 服务器,并通过 Spring MVC 实现 RESTful API。 在线商店:Spring Boot 可以用来构建电商网站,包括商品展示、购物车、订单处理、支付集成等功能。

    node-v0.9.6-x64.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    从交易模式看游戏陪玩平台的运行逻辑(一).docx

    从交易模式看游戏陪玩平台的运行逻辑(一).docx

Global site tag (gtag.js) - Google Analytics