经过我们几天的讨论,现在大家如果已经看完前4卷的话,应该已经可以轻松的搞定文本文件和ASP等文件与FLASH的数据传递方法了,今天我们来讨论怎样对对一定规模的数据进行有效的整理和安排。
在数据的整理我主要是用两种方法配合进行,分别是用Array和String这两个对象,因为我们在以后的历程中可能需要在FLASH中实现如小到留言板,大到论坛或者信息平台的功能,所以在FLASH中对数据的整理是非常重要的技术和技巧。我们在网页的功能编写中最最常见的应该算是列表之类的功能,我们今天的讨论实例将以实现软件下载系统的基本功能为主。软件下载系统相应大家都是经常接触的了,由于篇幅和时间的原因,我们在这里仅讨论软件下载系统的核心部分,其相关功能是:
我们还是用ACCESS数据库为例,在数据库中存储一系列软件信息,如软件名称,软件版本,推荐度,发布时间,软件介绍和下载链接等,然后我们将在FLASH中建立一个列表,并以每页10条记录的形式来显示这个数据库中的记录,并允许用户通过点击开始下载,这样的话,我们首先要写一个ASP文件(仅仅一个ASP文件就足够了),我们将在这个ASP文件中编写出按照指定的参数向FLASH提供第几页(如每页10条记录)的数据(其中包括每条记录的所有字段),也就是说,我们将每页的记录从ASP发向FLASH,然后再经过FLASH整理后,显示在列表上,这样的话,我们在每次从ASP发出数据时,因为需要以“变量名=值”的形式输出,所以在ASP部分的数据输出形式上是有两种风格的,我们以软件系统的数据为例讲解ASP部分的这两种数据整理风格:
第一种:我比较喜欢这一种,呵呵
变量名=软件1,软件2,软件3,软件4,软件5,软件6,软件7,软件8,软件9,软件10
第二种:我不怎么喜欢这一种,不过有很多人却喜欢这样干的
变量名0=软件数量&变量名1=软件1&变量2=软件2&变量3=软件3&变量4=软件4&变量5=软件5&变量6=软件6&变量7=软件7&变量8=软件8&变量9=软件9&变量10=软件10
两种风格之间其实也没有太明显的界线,呵呵,是吧,看各位的风格爱好了,当然也可以两种相结合,可能有部分人看到这里会纳闷,我现在在说些什么呢,怎么看不大明白呢?其实说白了也没什么,只是讨论一下我们每页要发出的数据怎样安排比较好,第一种的风格的实例如下:
aspRect=Foxmail,4.2,Windows,2003,Office,2003,Winamp,3.0
而另一种风格就如下所示:
softcount=4&softname1=foxmail&softname2=windows&softname3=office&softname4=winamp&softver1=4.2
&softver2=2003&softver3=2003&softver4=3.0
各位看完前4卷的朋友应该明白我现在在说什么了吧,如果仍有不清楚的请认真的从第1卷开始看,不许偷懒(这是为大家好,当然我也可以省些口水了)
说到这里我们已经讲到了前面两种数据输出的风格,接下来我们将讨论FLASH部分的处理,关于FLASH部分的处理嘛,我只有推荐一种,那就是引用对象数组来存这些数据,对于对象数组的基本操作,大家可以参考FLASHMX帮助中的Array对象,当然,我们还是有必要举下面几个例子:
如我们要在一个对象数组中保存一条软件信息的数据记录
SoftDatas=new Array();
SoftDatas.push({name: “Foxmail”, ver: 4.2, Size “2MB”,Note: “这是一个邮件收发软件”});
这样的话,我们在需要引用某一个软件的相关信息时,我们可以在FLASH中写如下代码来引用,如我们要在一个动态文本域中显示这个软件的名称:
txtBox.text=SoftDatas[0].name; //0是索引咯,各位有语言基础的就不用我说了,没语言基础的同志嘛,看样子得多看看书了
对了,说到这里,我们得向大家强调一下FLASH中关于变量和对象的基本使用
变量和对象在FLASH中分两种,一种是本地变量或本地对象,另一种是全局变量或全局对象
关于本地变量和对象的声明嘛,就是普通的声明方式,(其实FLASHMX 6当中可以不用声明)如:
var a=”abc”;//声明一个变量,名称是a,初始值是”abc”
var b=123;//声明一个变量,名称是b,初始值是123
c=new Array();//声明一个Array对象,也就是数组
这种变量和对象在声明之后只能在当前影片实例中直接引用,在其它的影片实例中需要引用时要以”.”或者”/”方式引用,在这里我们推荐使用”.”方式引用,如:
当我们引用最顶层实例中的变量或对象时,那就是_root.变量名
当我们引用上一层实例中的变量或对象时,那就是_parent.变量名
当我们要引用某个特定实例中的变量或对象时,那就是_root.实例名1.实例名2.变量名(类似文件夹路径,也有绝对路径和相对路径的形式)
说到这里或许有些人对引用方法还不是很熟悉,这样吧,我们换一种方法来理解,其实FLASH中的场景就相同于“我的电脑”中的磁盘分区C:,D:,E:等
然后每个场景中的影片实例就相当于磁盘分区中的文件夹,每个场景中都有一个顶级的实例就是我们新建一个FLASH文档之后所显示的那个实例,这个顶级的实例我们可以理解成磁盘的根目录,其它我们创建的影片元件实例可以理解成文件夹,结构也是一样的,都是呈树状的,所以每个影片实例中还可以再创建影片实例,这就相当于在文件夹中还可以再创建文件夹,然后实例的引用就相当于文件夹的路径,只是说区别如下:
FLASH相当于文件系统中的
_root.Windows.System32.shellC:\Windows\System32\shell
\abc_root.abc
.\abcthis.abc
..\abc_parent.abc
现在各位该清楚了吧,好,我们再来说全局变量和对象的引用,这个嘛,就非常简单了,直接写变量或对象的名称就OK了
好了,跑题好半天了,该回来继续做我们的下载系统了 (兄弟们别砸,呵呵,咦,我刚才说到哪儿了,我看看先… *^_^*)
哦,刚才说到整理数据了,说到这里有一点比较常用的技巧需要说一下,就是关于使用循环来引用变量或对象的方法,比如:我们有几个文本框,分别命名text1,text2,text3,text4,text5,然后我们不想一个一个的去引用,那么我们可以用循环或者过程来引用它们,比如说把它们的内容都设成www.coolthor.com,那么我们可以用下面的代码完成
for(i=1;i<6;i++){
this["text"+i].text=”www.coolthor.com”;
}
当然,除了实例["变量名"]的方法之外还有/方法,不过最好还是用上面的这个方法比较好。
好了,现在我们就要开始说下载系统的FLASH部分的实现方法了,由于篇幅原因,我在这里就只写出实现的方法
首先建立变量保存当前页的页码和总页数(这个值由ASP提供),这样我们就可以做上一页和下一页的按钮,并进行判断是不是当前页的页码超出了预期的范围,然后我们再来建立loadvars对象的实例和回调函数,然后再编写对象数组的赋值代码,参考代码如下:
/*设aspRect为返回的数据,我们以第一种风格为例,设ASP返回的数据是aspRect=Foxmail,4.2,Windows,2003,Office,2003,Winamp,3.0 */
SoftData=new Array();
tmpArray=aspRect.split(”,”);
tmpCount=0;
for(i=0;i<tmpArray.length;i++){
tmpCount++;
if (tmpCount==2){
tmpCount=0;
SoftData.push({name: tmpArray[i-1], ver: tmpArray});
}
}
然后,我们需要准备显示列表了,我比较习惯的方法是创建一个影片元件,在这个里面做好文本框和这条记录的按钮,并调整好位置,然后拉出10个到_root中,或者用attachmovie都可以,给它们加上顺序命名,如item1,item2,item3,item4…等等,然后嘛再该干什么就不用我说了吧
基本方法就是这些,哦对了,如果有需要将字串换成数值的,可以使用parseInt之类的函数来进行转换,还有就是比如说软件名称或者软件介绍中可能会出现&或者=号之类的,大家记在在asp输出之前把这些替换成全角的&和=,ASP中替换字串很容易,用Replace就可以了,FLASH中嘛,我在本卷的源代码中为大家写了一个全局函数Replace,用法和ASP中的那个一样,呵呵,今天就到这里,有需要本卷源代码者请付30分,哦,对了,还有些事情要告诉大家的就是,在我的源代码中为了方便大家阅读,所以绝大部分的变量和对象命名都是用的汉字,这一点在正式的编程中并不提倡,再就是大家要养成区分大小写的习惯,因为FLASH MX 7.0中已经区分大小写了,A并不等于a !!
- None




Leave a reply
You must be logged in to post a comment.