第19章 Flex中的数据处理
flexray总线的基本工作方式

flexray总线的基本工作方式FlexRay 是一种高性能、实时的汽车网络通信协议,用于在汽车电子系统中传输数据和控制信息。
它的基本工作方式包括以下几个方面:1. 时间分割多路访问(TDMA):FlexRay 使用 TDMA 技术,将时间分成循环的时间片 (静态时间周期)和动态的事件响应时间。
静态时间周期用于周期性传输数据,例如控制信息和周期性数据,而事件响应时间用于不规律的或事件触发的通信。
2. 静态和动态分段:FlexRay 将通信周期分为静态和动态分段。
静态分段用于周期性通信,由静态帧构成,其时隙在整个网络中同步。
动态分段则用于事件触发通信,由动态帧构成,具有较低的优先级。
3. 静态帧:静态帧用于周期性数据传输。
它们包括了时间周期表、同步信息、静态槽位和动态槽位。
每个节点都按照时间周期表发送静态帧,以确保同步和实时性。
4. 动态帧:动态帧用于低优先级、事件触发或不规律数据的传输。
它们可以在一个特定的事件响应时间段内灵活地发送。
5. 冲突处理:FlexRay 具有冲突检测和冲突解决机制。
如果两个节点在同一时间槽内发送冲突的消息,冲突将被检测到并根据冲突处理机制解决。
6. 冗余通道:FlexRay 提供了冗余通道,即 A 通道和 B 通道,以增强通信的可靠性。
如果一个通道出现问题,系统可以自动切换到另一个通道。
总体而言,FlexRay 通过静态和动态的分段、时间分割多路访问以及冗余通道等技术,实现了高速率、实时性和可靠性,适用于汽车领域的复杂控制和通信需求。
这种灵活的结构和机制使得 FlexRay 能够适应不同种类的数据传输,包括周期性和事件触发的通信,从而满足车辆内部的各种通信要求。
flex-basic用法

flex-basic用法Flexbasic是一种面向过程的编程语言,主要用于科学计算和数据处理领域。
它的设计目标是简化复杂问题的解决过程,并提供高效的数值计算能力。
在本文中,我们将深入介绍Flexbasic的特点、用法和一些示例,帮助读者更好地了解和应用这一编程语言。
首先,Flexbasic具有简洁、易于学习的语法。
与其他编程语言相比,Flexbasic语法更加简单明了,可以更快地上手。
它使用关键词和符号来表示不同的操作和数据类型,例如IF、THEN、ELSE、END IF等,这使得编写代码更加直观和易读。
1. 数据类型和变量声明在Flexbasic中,可以使用不同的数据类型来存储和操作不同类型的数据。
常用的数据类型包括整数(INTEGER)、浮点数(FLOAT)、字符串(STRING)等。
变量的声明可以通过使用DIM关键词来实现,例如:DIM age AS INTEGERDIM temperature AS FLOATDIM name AS STRING这样就定义了一个名为age的整数变量、一个名为temperature的浮点数变量和一个名为name的字符串变量。
2. 流程控制和条件语句在编写程序时,经常需要根据不同的条件执行不同的操作。
在Flexbasic 中,可以使用IF-THEN-ELSE等条件语句来实现流程控制。
例如:IF age > 18 THENPRINT "You are an adult."ELSEPRINT "You are a teenager."END IF这段代码根据变量age的值判断用户的年龄,然后输出相应的结果。
Flexbasic还提供了循环结构,例如FOR-NEXT、DO-WHILE等。
这些结构允许我们重复执行一定的操作,直到特定的条件满足。
以FOR-NEXT 循环为例:FOR i = 1 TO 10PRINT iNEXT i这段代码将输出从1到10的整数。
Flex网络通信技术

文件加载数据 , 因此首先要解决的是网络的通信 问题 。 t 传输的单位 Ht p 是整个页面, 也就是整个页面 的刷新 。在 He x中, 为了减少数据的通信 量 ,将刷新 限制在局部 ,而不是 整个 页面。通信 方式有 U I odr R . a e、 L
Sce、 ML ok tH r S ri 、 b ev e 几 种 。 ok tX S ce、 T P evc WeSri 等 e c 2各 种 通 信 方 式 介 绍 . 21 用 U La e 与 服 务 器 端 通 信 .使 RL odr U L odr A t n cit 提 供 的类 , R L ae 是 ci S r o p3 因而 在 Fah和 Fe 均 可 l s lx中 使 用 , 于加 载 外 部 文 件 。U L odr 以 文本 、 用 R La e 类 XML U 、 RL编 码 变 量 或 科来自信息 计 算机 与 网络
Fe lx网 络 通 信 技 术
广 州大 学华软软 件 学 院 袁 冠远 罗 林 杜 剑
[ 摘 要 ] 用 Fe 技 术开发 RI 使 Ix A应用程序 时, 必须与服务 器进行通信, 或者从 外部 XML文件或 文本文件加载数据, 因此首先要解决 的是 网络通信 问题 。本文全 面介绍 了 Fe l x提供的 多种通信方式, 细分析 了每种 方式的使 用方法及适 用情况 。 详 [ 关键词 ]lx 网络 通信 F e
果。
二进 制数 据 的形 式从 U L下 载 数据 ,使用 la R od方法 以发送 请 求 。 U L od r R L ae 类使用 A t n ci . ci S r t 0高级事件处理模 型, o p3 使用该 模型可以 侦 听 诸 如 cmpeehtSau 、 Erro e pors o l 、t ttsi r 、pn、rges和 scry ro 等 事 t p o o eui Err t 件。当数据加载完成之后 , 可使用 dt a a属性 获取接受到 的数据 。 除 U L odr R La e 类之外 , 还需要几 个相关类 : U V r be 类用于在 Fe 应用程序和服务器之 间传输变量 。 RL ai ls a lx U R q et RL eu s类用来定义一个 UR L请求 。其 ul 陛用 于指定请求 r属. 的 UR ; to L me d属性用 于控 制 H T h T P请求 方法 ;a dt a属性 用于给定传输 给服务器端的数据 , 它是一个 UR V r be 类 的对象 。 L ai ls a 22使用 Sce 类与服务器建 立套接 字连接 以实时通信 . ok t 尽 管 也 可 以 使 用 U L odr 加 载 二 进 制 数 据 ,但 是 , RL od r R La e 类 U L ae 类每次加载数据之前 , 必须发 出一个请求 。 如果想与服务器端保持一个 长连接以实时通信 , 则应该使用 Sc e类 。 okt S kt 也 是 A tn cit . 供 的 , c o e类 ei S r 0提 o p3 因而 在 Fah与 Fe l s l x中均 可 使用 。 它用于建立套接字连接并读取和写入原始二进制数据 。 使用二进 制 协 议 的 服 务 器 互 操 作 时 ,okt 非 常 有用 。 使 用 二 进 制 套 接 字 连 Sc e 类 接, 可以编写允许用 一些不 同的 Itme 协议 ( 如 P P 、MT 、MA ne t 例 O 3S PI P 和 N T 进行交互 的代码剐。 N P) 2 使用 X L o e 类以 X L消息持续通信 . 3 M Sc t k M 前面介 绍了使用 U L ae RL odr可以加载 X ML格式数据 , 使用 S k t c o e 类可以与服务器保持持续连接 , 但它却只能传送原始二进制数据 。 若获 得二者的优势 ,则可使用 XML okt ,它也是 A tn ci 内置 Sce 类 ci S r t o p 3的
Flex技术论文

Flex技术浅析摘要:flex是一种基于标准编程模型的高效ria开发产品集,flex最大的特点是基于全球流行的网络动画平台——macromedia flash。
通过flex技术,开发人员可以将ria程序编译成为flash文件,为flash player所接受,也就是说,flex技术所开发出来的程序对于大部分浏览者而言并不需要安装额外的客户端支持,这是其优势所在。
关键词:flex1 flex开发环境简介flex自flex2.0版本发展至今,框架逐渐合理化,效率也相对提高。
更加贴近了企业级网站开发的需求。
目前最新的编译环境为flash builder4.0 版本。
此开发环境可以集成到eclipse产品当中或者单独使用,但是界面的风格仍然和eclipse相类似。
2 flex技术元素2.1 mxml基于xml描述应用程序界面的语言;2.2 actionscript符合ecma(欧洲计算机制造商协会)标准的脚本语言,负责处理业务逻辑和业务建模;2.3 flex sdk flex的基础类库;2.4 通信服务flex支持adobe公司自定义的通信协议amf,它能够将flash/flex对象快速序列化、反序列化,采用二进制压缩传输数据,具有数据安全性高、传输快的优点。
3 flex客户端技术客户端的开发是flex开发企业级web应用系统的一大强项,其开发要点如下:3.1 模块化的开发在flex中可以针对每个页面建立一些mxml component文件,再将若干mxml component文件组织成一个mxml module文件,最后若干mxml module文件可以包含在作为主界面的application应用中。
这种开发模式可以使大型flex应用的功能模块划分更加清晰,避免了使用过多组件而导致swf文件过大、应用加载时间过长,提高了软件的可用性。
3.2 事件机制事件(event)让程序员知道用户何时与界面组件交互以及在组件的外观或生命周期中何时发生重要变化,如组件的创建、销毁和大小调整等。
Flex介绍

客户端技术
OpenLaszlo
Mozilla XUL
HTML5
Silverlight
JavaFX
Flash/Flex
AJAX
Rich Client
什么是Flex
-- Flash for Developer
Flex 基于Flash Flex是为程序员设计的Flash Flex的开发语言:ActionScript、MXML、 CSS。 可以把Flex当作Flash
Mxml是flex的标记语言,用来描述界面,同Html非常相 似,而且mxml更加规范化和标准化。 Mxml最终会被编译器解析为Action Script,然后生成 flash的swf文件。
说白了,我们写的代码最终会编译成flash。 Mxml使用 Flex Sdk进行编译。
Flex VS. Ajax
Flex Ajax 开发效率 Flex SDK, 可视化开发, Javascript 和XML编写, 效率高 没有成熟IDE 编译执行,易于Debug FLASH VM (Flash Player)执行,独立于浏 览器,效率高 安装Flash Player即可, 各种平台下表现一致 编译后的二进制文件,隐 藏了程序实现细节 解释执行,脚本语言,不 容易Debug 浏览器解释执行,效率低 不同浏览器可能执行得不 同 脚本代码,易被偷窃,篡 改
运行形式
执行效率
移植性
安全性
Pros
很好的用户体验 跨浏览器,跨平台 开发者角度
易学 免费/开源 丰富的组件库 对多媒体的广泛支持( 76%的视频文件在使用Flash 技术构建 如youtube) 设计师(Flash)、开发人员(Flex)通过 ActionScript可以更有效的合作。
flex与excel相互复制,导入,导出,另存为等通信问题

flex与excel相互复制在Excel(OpenOffice Calc)中,当多个单元格被复制时,这些单元格的数据是以tab键分隔一行行数据(tab- separated values (TSV))存放在剪贴板中的,当这些数据被粘贴到Google Spreadsheets中时,这些TSV格式的数据被解析并被相应插入到Google Spreadssheets中了。
既然知道其中的奥妙,那么剩下的就是在Flex中实现同样的效果了。
以下是我们的实现思路,可以在Excel和Flex相互直接复制粘贴数据。
我们的思路的精妙所在是隐藏文本(TextField)组件的使用:在DataGrid中,当按下Ctrl键时,我们创建一个隐藏的文本(TextField)组件,并将焦点定位给它,这样,我们就可以接受任何通过Ctrl+V粘贴过来的数据。
相应的我们也将DataGrid选择行数据以 TSV格式拷贝到TextField组件中,并且将所有的文本选择,这样我们使用Ctrl+C操作就可以复制当前行所有数据了。
监听隐藏文件组件的textInput事件。
如果有任何数据被粘贴的话,那么在这里数据将被解析,并插入到DataGrid中。
当Ctrl键释放后,移除隐藏的文本组件。
以下是完整实现示例代码:1.<?xml version="1.0"?>2.<mx:Application xmlns:mx="/2006/mxml">3. <mx:Script>4. <![CDATA[5. import flash.events.KeyboardEvent;6.7. private functiondataGridKeyDownHandler(event:KeyboardEvent):void8. {9. if (event.ctrlKey&& !dataGrid.getChildByName("clipboardProxy"))10. {11. // Add an invisible TextField object to the DataGrid12. var textField:TextField = new TextField();13. = "clipboardProxy";14. dataGrid.addChild(textField);15. textField.visible = false;16.17. textField.type = TextFieldType.INPUT;18. textField.multiline = true;19.20. // Populate the TextField with selected data in TSV format21.22. textField.text =getTextFromItems(dataGrid.selectedItems);23. textField.setSelection(0, textField.text.length - 1);24.25. // Listen for textInput event26.27. textField.addEventListener(TextEvent.TEXT_INPUT,28. clipboardProxyPasteHandler);29.30. // Set player-level focus to the TextField31.32. systemManager.stage.focus = textField;33. }34. }35.36.37. private functiondataGridKeyUpHandler(event:KeyboardEvent):void38. {39. if (!event.ctrlKey)40. {41. var textField:TextField = TextField(dataGrid42. .getChildByName("clipboardProxy"));43. if (textField)44. dataGrid.removeChild(textField);45. }46. }47.48. private functionclipboardProxyPasteHandler(event:TextEvent):void49. {50. // Extract values from TSV format and populate the DataGrid51.52. var items:Array = getItemsFromText(event.text);53. for each (var item:Object in items)54. dataGrid.dataProvider.addItem(item);55. }56.57. private function getItemsFromText(text:String):Array58. {59. var rows:Array = text.split("\n");60. if (!rows[rows.length - 1])61. rows.pop();62.63. var columns:Array = dataGrid.columns;64. var itemsFromText:Array = [];65.66. for each (var rw:String in rows)67. {68. var fields:Array = rw.split("\t");69.70. var n:int = Math.min(columns.length, fields.length);71. var item:Object = {};72. for (var i:int = 0; i < n; i++)73. item[columns[i].dataField] = fields[i];74. itemsFromText.push(item);75. }76.77. return itemsFromText;78. }79.80. private function getTextFromItems(items:Array):String81. {82. var columns:Array = dataGrid.columns;83. var textFromItems:String = "";84.85. for each (var it:Object in items)86. {87. for each (var c:DataGridColumn in columns)88. textFromItems += it[c.dataField] + "\t";89. textFromItems += "\n";90. }91.92. return textFromItems;93. }94. ]]>95. </mx:Script>96.97. <mx:DataGrid id="dataGrid" editable="true"98. keyDown="dataGridKeyDownHandler(event)"99. keyUp="dataGridKeyUpHandler(event)">100. <mx:columns>101. <mx:DataGridColumn headerText="Scheduled Date" 102. dataField="scheduledDate" />103. <mx:DataGridColumn headerText="Home Team" 104. dataField="homeTeam" />105. <mx:DataGridColumn headerText="Away Team" 106. dataField="awayTeam" />107. <mx:DataGridColumn headerText="Field"108. dataField="field" />109. </mx:columns>110. <mx:dataProvider>111. <mx:Object scheduledDate="4/1/2006"homeTeam="Chester Bucks"112. awayTeam="Long Valley Hitters" field="Dawn Field" />113. </mx:dataProvider>114. </mx:DataGrid>115.</mx:Application>这样我们可以写一个自定义组件继承自Datagrid组件来支持行级数据的复制粘贴:1.package com.yyhy.flex.util2.{3.import flash.events.KeyboardEvent;4.import flash.events.TextEvent;5.import flash.text.TextField;6.import flash.text.TextFieldType;7.8.import mx.controls.*;9.import mx.controls.dataGridClasses.DataGridColumn;10. //import mx.events.11.public class EIDataGrid extends DataGrid12.{13.public function EIDataGrid()14.{15.super();16.this.addEventListener(KeyboardEvent.KEY_DOWN,KeyDownHandler);17.this.addEventListener(KeyboardEvent.KEY_UP,KeyUpHandler);18.}19.private function KeyDownHandler(event:KeyboardEvent):void20. {21. if (event.ctrlKey&& !this.getChildByName("clipboardProxy"))22. {23. // Add an invisible TextField object to the DataGrid24. var textField:TextField = new TextField();25. = "clipboardProxy";26. this.addChild(textField);27. textField.visible = false;28.29. textField.type = TextFieldType.INPUT;30. textField.multiline = true;31.32. // Populate the TextField with selected data in TSV format33.34. textField.text = getTextFromItems(this.selectedItems);35. //textField.text =getTextFromItems(dataGrid.dataProvider.source);36. textField.setSelection(0, textField.text.length – 1);37.38. // Listen for textInput event39.40. textField.addEventListener(TextEvent.TEXT_INPUT,41. clipboardProxyPasteHandler);42.43. // Set player-level focus to the TextField44.45. systemManager.stage.focus = textField;46. }//end if47. }//end function48.49.50. private function KeyUpHandler(event:KeyboardEvent):void51. {52. if (!event.ctrlKey)53. {54. var textField:TextField =TextField(this.getChildByName("clipboardProxy"));55. if (textField)56. {57. this.removeChild(textField);58. }//end if59. }//end if60. }//end function61.62. private functionclipboardProxyPasteHandler(event:TextEvent):void63. {64. // Extract values from TSV format and populate the DataGrid65.66. var items:Array = getItemsFromText(event.text);67. for each (var item:Object in items)68. this.dataProvider.addItem(item);69. }//end function70.71. private function getItemsFromText(text:String):Array72. {73. var rows:Array = text.split("\n");74. if (!rows[rows.length - 1])75. rows.pop();76.77. var columns:Array = this.columns;78. var itemsFromText:Array = [];79.80. for each (var rw:String in rows)81. {82. var fields:Array = rw.split("\t");83.84. var n:int = Math.min(columns.length, fields.length);85. var item:Object = {};86. for (var i:int = 0; i < n; i++)87. item[columns[i].dataField] = fields[i];88. itemsFromText.push(item);89. }90.91. return itemsFromText;92. }//end function93.private function getTextFromItems(items:Array):String94. {95. var columns:Array = this.columns;96. var textFromItems:String = "";97. //add datagrid headtext98. for each (var i: DataGridColumn in columns)99. {100. textFromItems += i.headerText + "\t";101. }102. textFromItems += "\n";103.104. for each (var it:Object in items)105. {106.107. for each (var c: DataGridColumn in columns) 108. textFromItems += it[c.dataField] + "\t"; 109. textFromItems += "\n";110. }111.112. return textFromItems;113. }//end function114.}115.}在AIR环境下,可以使用as3xls-1.0.swc库来导出excel:1.<?xml version="1.0" encoding="utf-8"?>2.<mx:WindowedApplicationxmlns:mx="/2006/mxml" layout="absolute">3. <mx:Script>4. <![CDATA[5. import mx.controls.CheckBox;6. import mx.controls.Alert;7. import com.as3xls.xls.ExcelFile;8. import com.as3xls.xls.Sheet;9. import flash.filesystem.*;10. [Bindable]11. private var dp:Array = [12. {idx:1, names: "test1", sex: "b" },13. {idx:2, names: "test2", sex: "g" }14.15. ];16. public function doSelect(o:Object):void17. {18. Alert.show("行的数据分别是:"+o.idx+"/"+s+"/"+o.sex);19.20. }21.22.23.24. private var sheet:Sheet;25. private function onCreate():void {26.27. var excelFile:ExcelFile = new ExcelFile();28. sheet = new Sheet();29. sheet.resize(10, 10);30. sheet.setCell(0, 0, "Today’s date:");31. sheet.setCell(0, 1, new Date());32. excelFile.sheets.addItem(sheet);33. var mbytes:ByteArray = excelFile.saveToByteArray();34.35.36. var stream:FileStream = newFileStream();37. var docsDir:File =File.documentsDirectory.resolvePath("abc.xls"); // 定死文件名38.39. try40. {41. docsDir.browseForSave("SaveAs");42. docsDir.addEventListener(Event.SELECT, saveData);43. }44. catch (error:Error)45. {46. trace("Failed:",error.message)47. }48.49.50. functionsaveData(event:Event):void51. {52. var newFile:File =event.target as File;53.54. if (!newFile.exists)55. {56. var stream:FileStream =new FileStream();57. stream.open(newFile,FileMode.WRITE);58. stream.writeBytes(mbytes);59. // 写文件流60. stream.close();61. }62. }63.64.65.66. }67.68. ]]>69. </mx:Script>70.71. <mx:Panel>72.73.74. <mx:Button label="导出" click="onCreate()"/>75. <mx:DataGrid id="dg1" dataProvider ="{dp}">76.77. <mx:columns>78. <mx:DataGridColumn width="20" headerText="" >79. <mx:itemRenderer>80. <mx:Component>81. <mx:CheckBox change="{outerDocument.doSelect(data as Object)} " />82. </mx:Component>83. </mx:itemRenderer>84. </mx:DataGridColumn>85. <mx:DataGridColumn headerText="names"dataField="names" width="200" />86. <mx:DataGridColumn headerText="sex"dataField="sex" width="300" />87.88. </mx:columns>89. </mx:DataGrid>90. </mx:Panel>91.</mx:WindowedApplication>如果是flex web怎么办?flash.filesystem.File (AIR Only)在flex是实现不了的。
Flex讲解

Flex事件机制(二) 事件机制( 事件机制
Event类作为创建Event对象的基类,当发生事件时,Event对象将作为参数传递 给事件侦听器。如MouseEvent、KeyboardEvent • Event类有几个常用的公共属性: ◆是否冒泡:bubbles; ◆目标对象:target; ◆所处阶段:eventPhase; ◆当前对象:currentTarget; Flex事件机制中的自定义事件,也就是向监听器传递自己定义的事件类型,同 时可以通过事件传递参数。 • 1.创建自定义事件名称的Event dispatchEvent(newEvent(“myEvnet”,true,false)); • 2.创建自定义事件类 Public class MyEvent extends Event{ dispatchEvent是EventDispatcher的方法: publicfunctiondispatchEvent(event:Event):Boolean将事件调度到事件流中。事件 目标是对其调用dispatchEvent()方法的EventDispatcher对象。 •
控件简介(二)
• • • • • • • • • • • • • • • • • • • 5:flex控件: 警告alert弹出警告框 下拉列表combobox下拉数据列表 选色器colorpicker可选择的调色盘 数据表格datagrid 数据表格 日期选择器datechooser选择日期控件 日期条 datefield 单击弹出日期选择器 水平列表horizontalList 水平列表项目 水平尺/垂直尺 hrule vrule单个水平或垂直标尺 水平、垂直滑竿 hslider,vslider 图像 image 支持gif jpeg png svg swf 列表list 可滚动的数据组 计数器numericstepper单击向上的按钮增加数据,单击向下的按钮减少数据 进度条progressbar 当前操作进度 滚动条 水平,垂直滚动 scrllbar,hscrollbar,vscrollbar swf加载器 显示swf文件 列表条tabbar一组水平的列表 排列列表tilelist类似表格的行列对正排列的项目 树tree、以展开树的方式显示继承关系的数据 音像videodisplay flex应用中的数据流媒体
flex 数据库

Adobe AIR中使用Flex连接Sqlite数据库(1)2009-10-03 02:27Adobe AIR 包括一个基于 SQL 的关系数据库引擎(sqlite),该引擎在运行时中运行,数据以本地方式存储在运行 AIR 应用程序的计算机上的数据库文件中(例如,在计算机的硬盘驱动器上)。
由于数据库的运行和数据文件的存储都在本地进行,因此,不管网络连接是否可用,AIR 应用程序都可以使用数据库。
单个 Adobe AIR 本地 SQL 数据库作为单个文件存储在计算机的文件系统中。
运行时包括 SQL 数据库引擎,该引擎管理数据库文件的创建和结构化以及操作和检索数据库文件中的数据。
运行时不指定在文件系统上存储数据库数据的方式或位置;相反,每个数据库完全存储在单个文件中。
您指定在文件系统中存储数据库文件的位置。
单个 AIR 应用程序可以访问一个或多个单独的数据库(即单独的数据库文件)。
由于运行时将每个数据库作为单个文件存储在文件系统上,因此可以在需要时按照应用程序的设计和操作系统的文件访问约束查找您的数据库。
每个用户都可以具有其特定数据的单独数据库文件,或者数据库文件可以由在单个计算机上共享数据的所有应用程序用户访问。
由于数据对单个计算机是本地的,因此在不同计算机上的用户之间并不自动共享数据。
本地 SQL 数据库引擎未提供对远程数据库或基于服务器的数据库执行 SQL 语句的任何功能。
关于sqlite关于SQLite的特性:1. ACID事务2. 零配置–无需安装和管理配置3. 储存在单一磁盘文件中的一个完整的数据库4. 数据库文件可以在不同字节顺序的机器间自由的共享5. 支持数据库大小至2TB6. 足够小, 大致3万行C代码, 250K7. 比一些流行的数据库在大部分普通数据库操作要快8. 简单, 轻松的API9. 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定10. 良好注释的源代码, 并且有着90%以上的测试覆盖率11. 独立: 没有额外依赖12. Source完全的Open, 你可以用于任何用途, 包括出售它13. 支持多种开发语言,C, PHP, Perl, Java, ,Python更详细情况可以参考以下站点://本地 SQL 数据库的用途AIR 本地 SQL 数据库功能可以用于将应用程序数据存储在用户的本地计算机上的任何目的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
19.2.1
使用<fx:Model>组件存储数据
<fx:Model>组件是Flex 4.0中的数据模型组件,用于存 储自定义的数据。<fx:Model>以树型结构存储,类似XML 数据定义。树型存储结构的优点是定位迅速、容易理解。
19.2.2
使用<fx:Object>组件存储数据
<fx:Object>组件是一种抽象的数据模型组件,可用于 定义复杂数据。 <fx:Object>组件使用属性来存储数据。一个 <fx:Object>组件可看成为一行数据,多个<fx:Object>组件 就组成了类似表格的复杂数据模型。
<mx:PhoneFormatter>组件用以格式化电话。
19.4.6 邮编格式化组件 <mx:ZipCodeFormatter>
<mx:ZipCodeFormatter>组件用以格式化邮编。
19.5
小结
本章主要介绍了Flex 4.0中有关数据的操作与处理。内 容包括数据绑定、数据存储、数据验证、数据格式化等。其 中,数据绑定在Flex 4.0中应用很广泛。通过绑定的方法用 户可以以最少的代码编写最有效的应用程序。Flex 4.0中有 关复杂的数据可以存储于<fx:Model>组件、<fx:Object>组 件或<fx:XML>组件。数据验证可用于规范数据的输入,从 而避免复杂的逻辑判断。数据格式化可对特殊的数据进行格 式化,从而使数据格式统一、规范。
19.2.3
使用<fx:XML>组件存储数据
XML标准是国际通用标准,有非常广泛的应用。 <fx:XML>组件用于Flex应用程序中定义XML数据。 <fx:XML>组件的定义语法与<fx:Model>组件定义语法相近 ,都为树型数据定义。
19.3
数据验证
数据验证是指应用程序中对输入的数据进行某种方式 的校验。本章将详细介绍Flex 4.0数据验证的基本方法和自 定义方法。本章结尾还将提供一个用户注册的实例来帮助读 者掌握数据验证。
19.3.6
数据验证应用实例
互联网应用程序中用户注册时经常需要数据验证,如 密码长度、电子邮箱等。本小节为读者详解用户注册实例。
19.4
数据格式化
数据格式化是对某些特殊的数据的格式进行规范。例如, 日期格式有很多种,可以为“1990-1-2”、“2/1/1990”等。有 时数据格式化是必须的,如货币的格式要统一。
验证触发方式
1.默认触发验证 2.任意动作触发验证
19.及处理。验证组件中提 供了丰富的错误类型,只是这些错误类型的提示是英文的, 用户可能需要改变提示。修改错误提示的方法是修改组件中 相应的错误类型属性。
19.3.5
自定义验证组件
当验证组件不能满足用户的特殊验证需求时,用户可 考虑自定义验证组件。一般来说,多条件复杂数据验证都需 要自定义验证组件。例如,字符串长度为3~43,内容不能包 含某些脏字。 Flex 4.0中自定义验证组件先继承功能最相近的验证组 件,然后重写验证组件中的doValidation方法。
第19章
Flex中的数据处理
数据是程序处理的主要对象。在应用程序中最核心的 部分也是数据处理。本章将为读者介绍Flex 4.0中对数据的 处理,包括数据绑定、数据存储、数据验证、数据格式化等 内容。
19.1
数据绑定
数据绑定是指用户可以将某个属性与其他的属性或变 量相关联。这样,当被绑定的属性或变量发生改变时,绑定 项同时发生改变。数据绑定是Flex技术中一项非常有用的技 术,可以有效地减少程序代码,提高运行效率。
19.4.3
日期格式化组件<mx:DateFormatter>
<mx:DateFormatter>组件用以格式化日期。
19.4.4 数字格式化组件 <mx:NumberFormatter>
<mx:NumberFormatter>组件用以格式化数字。
19.4.5 电话格式化组件 <mx:PhoneFormatter>
19.3.1
数据验证组件概述
数据验证组件是专门针对数据验证的特殊组件,包含 一定规则的验证及出错提示。使用数据验证组件使得对数据 验证更加方便,摆脱了复杂的验证逻辑,有利于应用程序的 开发。 Flex 4.0中提供了一些常用的组件进行数据验证,这些 组件能基本满足用户的要求。若用户想自定义所需的数据验 证,可继承类型相近的验证组件,从而创建自定义的数据验 证组件。Flex 4.0提供的数据验证组件,包括 CreditCardValidator、CurrencyValidator、DateValidator 等。这些组件中的可以有效地完成验证任务,出错提示也很 丰富。
19.2
复杂数据的存储
数据存储是指在编程过程中将数据以特定的形式存储 。简单的数据模型可以用简单的数据类型存储,如int型、 String型、Array型。对于复杂的逻辑模型,需要将数据合 理的存储。Flex 4.0提供了<fx:Model>、<fx:Object>、 <fx:XML>3种存储复杂的数据模型。
19.3.2
如何使用数据验证组件
指明source属性和property属性表示验证组件针对某一 数据组件的特定属性进行验证。以下代码使用 <mx:PhoneNumberValidator>组件对一个输入框中的文本进 行电话号码验证。 由于验证组件都不为可视化组件,所以不能放置于可 视化组件内。
19.3.3
19.4.1
格式化组件概述
Flex 4.0中提供了几种常见的数据格式化组件,如 DateFormatter、NumberFormatter、PhoneFormatter等。
19.4.2 货币格式化组件 <mx:CurrencyFormatter>
<mx:CurrencyFormatter>组件用以格式化货币。
使用<mx:Binding>组件绑定数据
<mx:Binding>组件也可实现绑定数据。 <fx:Binding>组件绑定方式完全可以用“{}”方式替代 。其中,source属性指明的绑定源可在“{}”中的定义。
19.1.3
双向绑定(新增)
在Flex 4之前只存在单向数据绑定的功能,Flex 4中新 增了双向绑定。 双向绑定有两种方法可以实现:通过控件的属性和 <fx:Binding>组件。 在需要绑定的组件的属性中,添加一个@符号,就代 表了该属性的双向绑定。 通过设置<fx:Binding>组件“twoWay”属性,可以实 现双向绑定。
19.1.1
简单绑定方式
Flex 4.0中绑定数据最简单的方式是使用“{}”运算符
。 使用“[Bindable]”关键字可指明变量或属性为可绑定 。
组件的大部分属性都是可绑定的,因为在组件定义中 属性一般都指明为“[Bindable]”。对于要绑定的变量需要 先声明为“[Bindable]”。
19.1.2