快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

Flash MX 2004 数据绑定(2)

上篇文章:http://www.webjx.com/htmldata/2005-03-09/1110356957.html

格式化

好了!我们已经知道怎样从一个组件中得到一个值并且把这个值放在另外一个组件中。但是这通常是不够的。有时我们需要在组件中的数据以不同方法展现;有时需要两个组件展示不同的数据。
我们用格式化来实现这个目标。有几个内建的格式化工具你可以选择,同时你也可以自定义的格式,用AS2类。你可以选择在选择绑定时选择格式化工具并且从列表中选择它们。选择自定义的格式需要用到你自己的类。

我们以内建的格式开始,比如

Boolean(布尔值)

也许是最简朴的内建格式化方法。它仅仅是一个布尔值(或真或假)并且输出一个字符串。你可以通过真或假来选择要描述的值――在格式化选项中。

« Full Screen »

Bool_formatter.fla

Compose String(排列字符串)

转变一个对象的域,形成单个字符串。你可以结合任何数量的域,也可以插入其他的字符。建立一个字符串模板,选择格式化选项并键入字符串。你也可以放置任何文本在这里,但是任何在”<>”表示符中的内容将被做为一个域来处理。假如对象有子对象(比如XML)那么,你可以使用它们――通过点语法来获得它们的路径。字符串模板的例子如下:

« Full Screen »

Compose_formatter.fla

Date(日期)
把日期转变成字符串,简朴的模板如“MM/DD/YYYY”。答应的格式“M”(月份),“D”(日期),“Y”(年份),“H”(小时),“N”(分钟)和“S”(秒)。你可以用格式化工具反向格式化字符串为日期,但是由于某种原因,这种做法仅仅用在双向绑定中。

« Full Screen »

Date_formatter.fla

Number (数字)
异常简朴的格式化选项。可以显示十进制的数字。

« Full Screen »



Number_formatter.fla

Rearrange Fields (重新排列的域)

让你可以协调域,比如一个组件的数据源中的域名和另一个组件数据源的域名不同的情况下。域是以列表的形式成对出现在格式化选项中。比如一个简朴的字符串:”label=name;data=colour;otherField=yetAnotherField”。这对于显示数据很有用,比如以下拉列表框和列表框显示数据;相应改变组件标签域属性,可以用重新排列的域格式化你想显示的作为标签的域。在这个例子中,一些XML文件已经加载了,用来移植到下拉列表框和它的域(重新排列的),所以名称属性被用作标签。

« Full Screen »

Rearrange_formatter.fla

要自定义格式,需要定义一个很简朴的类,它有两个方式:格式化和非格式化,为每种类型提供一个依据,并且可以返回任何东西。在这个例子中,类格式化数字为英镑符号:

代码:
// class used to convert numbers to sterling currency and back again
class SterlingFormatter {

    // turns a number into a string
    function format (data:Number) : String{
        var currency:String;
        var pounds:Number = Math.floor(data);
        var pence:Number = Math.round((data - pounds)*100);
        var poundsStr:String = String(pounds);
        var penceStr:String;
        if(pence<10){
            penceStr = "0" + String(pence);
        }else{
            penceStr = String(pence);
        }
        currency = "&pound;" + pounds + "." + penceStr;
        return currency;
     }

    // removes sterling format and returns a number
    function unformat (data:String) : Number {
        var str:String = data.substr(1);
        var num:Number = parseFloat(str);
        return num;
     }
}

键入一个数值在左边,看看有边会有什么格式产生

« Full Screen »

局限、防范、实践

创作时的数据绑定是基于mc路径的,这将带来一些局限和危险。主要的问题是当你建立一个在两个组件之间的绑定时,这两个组件的实例必须被唯一的标识,而且这也依靠它们的路径。因此,假如你改变了一个组件的路径,之后再提供绑定,将会丢失这个绑定。尽管我已经注重到你可以安全的改变组件实例的名字不必改变它们的绑定。



通常,在运行时,组件可以从绝对路径上解决绑定问题。但是假如你提供到一个舞台上不存在的mc的绑定,绑定将从可以被识别的mc中选择“最远的”。问题是同样的mc将被不同的解释,假如该mc是在舞台上编辑过的或者在库中编辑的。要避免混乱、冲突、遗失已完成的内容,你需要遵循如下的指导方针:

1、    不要对这样的mc使用绑定:即在创作过程中加到舞台上,又使用了动态附加的;
2、    不要对舞台上选择了“编辑”过的符号提供数据绑定。使用“本地编辑”保护mc的内部结构关系;
3、    在加入绑定之前,谨慎的规划你的应用程序,假如程序很复杂的话。当你觉悟到因为所有的组件嵌套在一个mc里而使所有的绑定失去了作用,将是一件无法启齿的错误。
4、    假如要将应用程序动态的加载到其他的影片里,使用 _level替代影片的target。

总的说来,以上的讲解只是引导你用窗体建立最简朴的应用程序的开始,你还要添加很多的场景和组件。使场景都这场运转起来后再加入数据绑定。最后一点要说明(有点讨厌但它也确实是个尖锐的问题,在很多情况都会发生)。

假如你已经看过源文件,你就会发现我在引导层加入了一些箭头符号。这对于简朴的绑定来说无关紧要,但是一些复杂的系统绑定是很难跟踪的,所以我提倡这样做:用最原始的“文档”来说明你在做着什么。用语言来描述你所做的绑定是比较困难的,但是图示可以很只管的表达绑定的意思。假如一些东西需要比较具体的说明,那么在一个引导层用文本来注释是很有帮助的。这些箭头不是正是的符号,重要的是可以保留一些对将要发生的事情的暗示。

结束
数据绑定在MX2004中是个重要的主题,并且有很多方面我还没有涵盖到,包括运行时的API和身份认证。这本身就是个主题,但是很值得把握――它涵盖了很多的功能,你可以节省很多的时间和精力,不用重新构建它。

然而你也许不会选择数据绑定面板来开发企业级应用程序,你也许直接会用运行时的API。但是数据绑定面板可以迅速的提供一个原型或小型应用程序,因为它们提供了异常简朴的方式来构建复杂的数据交互。身份认证和格式化都可以通过AS2实现可扩展功能,是没有限制的。

附源文件下载:
fmx2004-databinding.zip
fmx2004-databinding1.zip
fmx2004-databinding2-1.rar
fmx2004-databinding2-2.rar




返回类别: Flash教程
上一教程: Flash游戏开发系列一:游戏中的敌人1
下一教程: 关于控制影片的播放和倒退

您可以阅读与"Flash MX 2004 数据绑定(2)"相关的教程:
· Flash MX 2004 数据绑定(1)
· Flash MX 2004出色实例视频教程:《江南》MV制作(4)
· Flash MX 2004实现场景随鼠标移动效果
· Flash MX 2004实例制作视频教程:五彩苹果
· 使用外部 CSS 来设置 Flash MX 2004 组件外观
    微笑服务 优质保证 索取样品