August 2008 Archives

前阵子看到as3cn论坛上关于处理TextField中链接改自定义鼠标样式的问题:如何禁止超链接上的手形光标?,不过问题是就算Mouse.hide()情况下鼠标移动到<a/>上,那个小手还是会出来的,而且问问题的想对一些链接有特有的鼠标样式,估计这些可以帮助到你

我的解决办法就是使用自己的标签加以侦听之后修改鼠标样式,是没有办法的办法,下面代码效率不高,也没有经过什么优化,就一个原型,对了,还忘记把TextField的滚动栏考虑进去之类,不过我觉得滚动栏之类的在基础上是很好解决的,就不去弄啦,有兴趣的或者有更好想法的也弄弄吧

原理就是找出自定义标签包含的文字,确定在TextField.text中的序列,之后获得其相应的矩形覆盖,作为MouseMove的判断依据,记得TextField.selectable = false问题就不大了

             ----  by magicianzrh

-------------------------------------------------------------------------

This article is for a problem that someone wants to change the mouse style when mouse on those fonts in <a/> tag in TextField.Even though use Mouse.hide(),the hand will show when mouse on thouse fonts.And if we want to keep a mouse style on some fonts and another style on other fonts,maybe this article can help you.

So I use my custom tag to fix the problem as follows:

Find out those fonts in my custom tag,store those fonts' index number in a array,and get those rectangle by TextFiled.getCharBoundaries().Now,I can check whether mouse on my custom tag,and keep "TextField.selectable = false" if you want to code some mouse effect for it.

Notice:I don't code some handlers for the scrollbar of the TextField.

For I have no enough time to those code more effective,maybe you have another good idea to fix this problem,and give me a mail:magicianzrh@gmail.com or reply this article. :)

 

Now the code

TextFieldCustomTagHandle.zip

Good Luck & Have Fun! 

做个总结吧

因为blog样式不想去调整,所以这几篇文章过去后会占用很大版面,这里做些链接跟上传点东西

Flex SDK coding conventions and best practices(翻译了下)--Naming篇

Flex SDK coding conventions and best practices(翻译了下)--Language Usage篇

Flex SDK coding conventions and best practices(翻译了下)--File Organization篇

Flex SDK coding conventions and best practices(翻译了下)--Formatting篇

Flex SDK coding conventions and best practices(翻译了下)--ASDoc篇

推荐看原文,虽然好多都To Be Done

http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions

花这些精力,主要是上面的都是关于Flex SDK代码编写标准,既然Flex SDK牛人们觉得标准的东西,好歹也得观摩学习的

其实很多编写方式如果是ActionScript 3的话是可以在FDT3中完成相应的设置,但Flex这方面就弱了

 

最后上传一份《Adobe Flex编码指南v1.2》的中文版,由Dofy翻译的,他邮箱dofyyu@gmail.com,pdf版本,那上面5篇我就不做pdf了,首先翻译是我边看边弄的,很多术语翻译得很搓,其次这阵子对其他感兴趣去弄了,也没空闲了,还得玩玩DotA,毕竟大学最后一个暑假了,再不玩以后就没机会了,当然如果有谁愿意做份pdf版本,那是相当的赞呐,记得留个言给我--blog留言多有不便,js懒得去改了

Adobe Flex Code GuideBook v1.2 Chinese Verson.pdf

 

Good Luck & Have Fun!

原文http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions#CodingConventions-ASDoc

我只是自己看得时候弄弄,翻译质量也不高的,大家将就看看吧

                       ------ by magicianzrh

接上篇Flex SDK coding conventions and best practices(翻译了下)--Language Usage篇

Flex SDK coding conventions and best practices(翻译了下)--Naming篇

Flex SDK coding conventions and best practices(翻译了下)--File Organization篇

Flex SDK coding conventions and best practices(翻译了下)--Formatting篇

--------------------------------------------------------------------------------------------------------

ASDoc

属性注释(Property comments)

对于一个对get/set函数,只对第一个函数做注释文档

/**
 *  @private
 *  The backing variable for the property.
 */
private var _someProp:Foo;

/**
 *  Place all comments for the property with the getter which is defined first. 
 *  Comments should cover both get and set behavior as appropriate.
 */
public function get someProp():Foo
{
  ...
}
 
/**
 *  @private
 */
public function set someProp(value:Foo):void
{
  ...
}

同样,在一个类中ASDoc注释对标签也会起作用如同对于其他构造函数,所以请注意你的注释的目标,如果你对一个绑定的属性做注释,应该在get函数前,而不是Bindable标签前

推荐:

[Bindable("somePropChanged")]

/**
 *  Comments for someProp
 */
public function get someProp():Foo

不推荐:

/**
 * Comments for someProp
 */
[Bindable("somePropChanged")]

public function get someProp():Foo
 

算是结束了,有更新我发现了会刷刷

Good Luck & Have Fun!

原文http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions#CodingConventions-Formatting

我只是自己看得时候弄弄,翻译质量也不高的,大家将就看看吧

                       ------ by magicianzrh

接上篇Flex SDK coding conventions and best practices(翻译了下)--Language Usage篇

Flex SDK coding conventions and best practices(翻译了下)--Naming篇

Flex SDK coding conventions and best practices(翻译了下)--File Organization篇

--------------------------------------------------------------------------------------------------------

格式(Formatting)

这部分包括讲述一个Flex类该如何格式化

--------------------------------------------------------------------------------------------------------

线宽(Line width)

代码保持80字符长度,这样做有下面几个优点:

  • 小屏幕的开发者不需要滚动就可以看到长代码
  • 对比代码的工具可以同时两边显示两个版本的同一文件
  • 文字大小可以加粗加大而不需要滚动
  • 源代码不需要裁剪就可以打印

--------------------------------------------------------------------------------------------------------

缩排(Indentation)

使用4空格来缩排,配置你的编辑器插入空格而不是Tab,这可以让其他使用不同缩排设置的程序也可以使用代码,如使用8字符的文本就不需要改变设置就可以方便显示了

--------------------------------------------------------------------------------------------------------

分段说明(Section separators)

插入类中的主要的分段说明如下:

    //--------------------------------------------------------------------------
    //
    //  Overridden methods
    //
    //--------------------------------------------------------------------------

横向由4字符到80字符宽度,文本缩排到8字符

在类中的小分段说明如下,如在属性间的说明

    //----------------------------------
    //  visible
    //----------------------------------

横向由4字符到40字符宽度,文本缩排到8字符

在分段说明上下留空一行

--------------------------------------------------------------------------------------------------------

分段声明注释(Separation of declarations)

在常量、变量以及函数声明间纵向使用一空行分开

/**
 *  @private
 *  Holds something.
 */
var a:Number;

/**
 *  @private
 */
var b:Number

--------------------------------------------------------------------------------------------------------

标签(Metadata)

TBD

推荐:

Inspectable[a="1", b="2"]

不推荐:

Inspectable[a=1 b=2]

--------------------------------------------------------------------------------------------------------

数组索引(Array indexing)

不在数组[]中的索引左右使用任何空格

推荐:

a[0]

不推荐:

a[ 0 ]

--------------------------------------------------------------------------------------------------------

逗号(Commas)

在逗号有使用一个空格,这个规则适用于参数列表、数组内容和Object内容

--------------------------------------------------------------------------------------------------------

数组内容(Array literals)

对于数组内容,在[]内部内容的最前和最后加入一个空格,同时在逗号后加入一个空格

推荐:

[ 1, 2, 3 ]

不推荐:

[1, 2, 3]
  
[1,2,3]

空数组是一个例外

推荐:

[]

不推荐:

[ ]

格式化数组初始化多行内容如下

static var numberNames:Array /* of String */ =
[
    "zero",
    "one",
    "two",
    "three",
    "four",
    "five",
    "six",
    "seven",
    "eight",
    "nine"
];

--------------------------------------------------------------------------------------------------------

Object内容(Object literals)

对于Object内容,在{}内部内容的最前和最后加入一个空格,同时在逗号后加入一个空格

推荐:

{ a: 1, b: 2, c: 3 }

不推荐:

{a: 1, b: 2, c: 3}

{a:1, b:2, c:3}

{a:1,b:2,c:3}

空Object是例外

推荐:

{}

不推荐:

{ }

格式化Object初始化多行内容如下:

private static var TextStyleMap:Object =
{
    color: true,
    fontFamily: true,
    fontSize: true,
    fontStyle: true,
    fontWeight: true,
    leading: true,
    marginLeft: true,
    marginRight: true,
    textAlign: true,
    textDecoration: true,
    textIndent: true
};

--------------------------------------------------------------------------------------------------------

函数内容(Function literals)

TBD

var f:Function;

f = function():void
{
    doSomething();
};

--------------------------------------------------------------------------------------------------------

类型说明(Type declarations)

不在:前后使用任何空格

推荐:

var n:Number;

不推荐:

var n : Number;

var n: Number;

推荐:

function f(n:Number):void

不推荐:

function f(n : Number) : void

function f(n: Number): void

--------------------------------------------------------------------------------------------------------

操作符相关(Operators and assignments)

操作符前后加入一个空格

推荐:

a = 1;

不推荐:

a=1;

推荐:

a + b * c

不推荐:

a+b*c

推荐:

a == b

不推荐:

a==b

不在前置操作符前后加空格.

推荐:

!o

不推荐:

! o

不在后置操作符前后加空格.

推荐:

i++

不推荐:

i ++

--------------------------------------------------------------------------------------------------------

指令部分(Statements)

一个指令一行这样可以在任何一个指令中设置断点

推荐:

a = 1;
b = 2;
c = 3;

不推荐:

a = 1; b = 2; c = 3;

每个大括号一行

推荐:

function f():void
{
    var n:int = numChildren;
    for (var i:int = 0; i < n; i++)
    {
        if ()
        {
            x = horizontalGap * i;
            y = verticalGap * i;
        }
    }
}

不推荐:

function f():void {
    var n:int = numChildren;
    for (var i:int = 0; i < n; i++) {
        if () {
            x = horizontalGap * i;
            y = verticalGap * i;
        }
    }
}

--------------------------------------------------------------------------------------------------------

常量变量说明(Constant and variable declarations)

TBD

--------------------------------------------------------------------------------------------------------

函数说明(Function declarations)

TBD

推荐:

f(a, b)

不推荐:'

f(a,b)

f( a, b )

 

这部分最好看看原文排序,我的blog这些样式都没有设置,就是弄得好看点

public function foo(parameter1:Number, parameter2:String,
                    parameter3:Boolean):void

public function foo(parameter1:Number,
		    parameter2:String,
                    parameter3:Boolean):void

public function aVeryLongFunctionName(
    parameter1:Number, parameter2:String,
    parameter3:Boolean):void

--------------------------------------------------------------------------------------------------------

Function calls

TBD

Do this:

f(a, b)

Not these:

f(a,b)

f( a, b )

--------------------------------------------------------------------------------------------------------

if指令(if statements)

在if关键字后加入一个空格,()的内容最前最后不加空格

推荐:

if (a < b)

不推荐:

if(a < b)

if( a < b )

if ( a < b )

else if ?

multiline ?

--------------------------------------------------------------------------------------------------------

for指令(for statements)

在for关键字后加入一个空格,()的内容最前最后不加空格

推荐:

for (var i:int = 0; i < n; i++)

不推荐:

for(var i:int = 0; i < n; i++)

for( var i:int = 0; i < n; i++ )

for ( var i:int = 0; i < n; i++ )

下面排序跟function的差不多

for (var aLongLoopVariableName:int = aLongInitialExpression;
     aLongLoopVariableName < aLongUpperLimit;
     aLongLoopVariableName++)

--------------------------------------------------------------------------------------------------------

switch指令(switch statements)

在switch关键字后加入一个空格,()的内容最前最后不加空格

推荐:

switch (n)

不推荐:

switch(n)

switch( n )

switch ( n )

 

推荐:

switch (n)
{
    case 1:
    {
        a = foo();
        break;
    }

    case 2:
    {   a = bar();
        break;
    }

    default:
    {
        a = blech();
        break;
    }
}

不推荐:

switch(n)

switch( n )

switch ( n )

--------------------------------------------------------------------------------------------------------

类和接口说明(class and interface declarations)

大括号对称

一行指令一单独行

--------------------------------------------------------------------------------------------------------

 

总一句就是让自己看着舒服,让别人看着爽

Good Luck & Have Fun!

原文http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions#CodingConventions-FileOrganization

我只是自己看得时候弄弄,翻译质量也不高的,大家将就看看吧

                       ------ by magicianzrh

接上篇Flex SDK coding conventions and best practices(翻译了下)--Language Usage篇

Flex SDK coding conventions and best practices(翻译了下)--Naming篇

--------------------------------------------------------------------------------------------------------

File Organization(文件组织)

这部分旨在说明一个Flex框架文件应该怎么组织

--------------------------------------------------------------------------------------------------------

版本说明(Copyright notice)

框架中的每一个as文件都包括一个版本说明,2008开源版本说明格式如下:

////////////////////////////////////////////////////////////////////////////////
//
//  ADOBE SYSTEMS INCORPORATED
//  Copyright 2008 Adobe Systems Incorporated
//  All Rights Reserved.
//
//  NOTICE: Adobe permits you to use, modify, and distribute this file
//  in accordance with the terms of the license agreement accompanying it.
//
////////////////////////////////////////////////////////////////////////////////

注意是80个字符宽度

--------------------------------------------------------------------------------------------------------

包说明(package statement)

TBD

--------------------------------------------------------------------------------------------------------

导入部分说明(import statements)

TBD

--------------------------------------------------------------------------------------------------------

命名空间说明(use namespace statement)

TBD

--------------------------------------------------------------------------------------------------------

类标签(Class metadata)

这部分组织类标签,包括Event、Styles、Effects、Excluded APIs和其他的标签

对应每个标签在前面均有一小部分说明,注意这部分是40字符宽度,而且在//和标签名前留有2个空格距离

每个部分标签按标签name的名字首字母依次排序,对于其他没有name属性的,按标签类型名字排序

例子如下:

//--------------------------------------
//  Events
//--------------------------------------
/
**
 *  ASDoc comment.
 */
[Event

/**
 *  ASDoc comment.
 */
[Event

//--------------------------------------
//  Styles
//--------------------------------------

/**
 *  ASDoc comment.
 */
[Style

/**
 *  ASDoc comment.
 */
[Style]

//--------------------------------------
//  Effects
//--------------------------------------

/**
 *  ASDoc comment.
 */
[Effect

/**
 *  ASDoc comment.
 */
[Effect]

//--------------------------------------
//  Excluded APIs
//--------------------------------------

[Exclude(name=&quot;horizontalAlign&quot;, kind=&quot;style&quot;)]
[Exclude(name=&quot;verticalAlign&quot;, kind=&quot;style&quot;)]

//--------------------------------------
//  Other metadata
//--------------------------------------

[DefaultBindingProperty(source=&quot;text&quot;, destination=&quot;text&quot;)]
[IconFile(&quot;Text.png&quot;)]

--------------------------------------------------------------------------------------------------------

类声明(Class declaration)

TBD

--------------------------------------------------------------------------------------------------------

包括Version.as文件(include statement for Version.as)

每个类都应该包含core/Version.as文件来作为相互间联系路径,Version.as文件中有对Version的静态常量声明

include "../core/Version.as";

--------------------------------------------------------------------------------------------------------

Implementation notes

TBD

--------------------------------------------------------------------------------------------------------

Class initialization

TBD

--------------------------------------------------------------------------------------------------------

类常量(Class constants)

这使用static const声明

ActionScript 3不允许Array和Object类型声明为常量,应该把他们声明为static var而不是static const,把他们放在这部分是因为在概念上他们属于这个范畴

--------------------------------------------------------------------------------------------------------

Class mix-ins

Declare any static variables of type Function that get mixed in rather than being declared as methods.

--------------------------------------------------------------------------------------------------------

Class resources

TBD

--------------------------------------------------------------------------------------------------------

Class variables

TBD

--------------------------------------------------------------------------------------------------------

类属性(Class properties)

定义static的getters和setters,对他们按名字母排序,同时对每个getter和setter在签名加以简短说明

Declare static getters and setters here. Order them alphabetically by property name. Use a minor separator with the property name for each one. Put the getter before the setter.

--------------------------------------------------------------------------------------------------------

类方法(Class methods)

static function声明将放在这

--------------------------------------------------------------------------------------------------------

Constructor

TBD

--------------------------------------------------------------------------------------------------------

Variables

TBD

--------------------------------------------------------------------------------------------------------

重写属性(Overridden properties)

把重写的同时不是static的getter和setter放在这部分,同理按其名字字母排序,并在每个前相应加入简短说明

--------------------------------------------------------------------------------------------------------

属性(Properties)

把新的不属于static的属性放这部分,同理按其名字字母排序,并在每个前相应加入简短说明

--------------------------------------------------------------------------------------------------------

重写方法(Overridden methods)

把重写的不属于static的函数放这

--------------------------------------------------------------------------------------------------------

方法(Methods)

把新的不属于static的函数放这

--------------------------------------------------------------------------------------------------------

重写的事件处理(Overridden event handlers)

把重写的事件处理放这

--------------------------------------------------------------------------------------------------------

事件处理(Event handlers)

把新的事件处理放这

--------------------------------------------------------------------------------------------------------

包外的帮助类(Out-of-package helper classes)

TBD

--------------------------------------------------------------------------------------------------------

 

这部分好多TBD,大家要了解就多看SDK吧

Good Luck & Have Fun!

(其实经过ps的)

学校论坛看到的,转来娱乐下

  baidu_chinese_football.jpg

没有安装gg平台没赶上直播,正在下载视频,昨天校内论坛刷帖太快了,中国队EHOME有我们的2009(小妞),小妞终于完成了他的心愿

小妞回来了肯定要bg的(bg就是请客吃法的浙大说法,可以google下),如果再不回来,就要离开了浙大嘞

浙大游戏气氛还是一如既往的牛逼呀,竞技游戏名人都有浙大滴

想起小妞他们去年WCG没有国内出线,去年是以校队的方式去北京打的-AVNC,想我也是AVNC的一员,2009其实最早是小妞在AVNC中的编号,虽然后来因为自己很多事情忙,慢慢的很多比赛也没有打,要不是学校网络老是变动,Battle Net服务器又在学校检测时候封了一个,搞得现在BN质量如果以前,大家只好晚上去网吧打VS,去年有几次过去网吧看他们比赛,就是没有打的冲动了

最后来张2009五杀图

Good Luck & Have Fun!

dota_2009_five kills.jpg

原文:http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions#CodingConventions-LanguageUsage

我只是自己看得时候弄弄,翻译质量也不高的,大家将就看看吧

                       ------ by magicianzrh

接上篇Flex SDK coding conventions and best practices(翻译了下)--Naming篇

Language Usage(措辞用法)

这个部分讨论如何构建好我们的ActionScript 3代码,特别遇到我们有多种方式表达同一个意思的时候。

--------------------------------------------------------------------------------------------------------

编译选项(Compilation options)

编译使用选项-strict(严格类型)和-show-actionscript-warnings(如字面意思就是会报警告),这些都作为默认设置写在flex-config.xml文件中

--------------------------------------------------------------------------------------------------------

基于属性的公共接口(Property-based APIs)

在公共接口实现中选择基于属性,而不是基于方法,这样做可以在MXML语法中更便捷的使用设置属性。

--------------------------------------------------------------------------------------------------------

类型声明(Type declarations)

为每一个常量、变量、函数参数和函数返回值声明所属类型,就算是简单的标注 "*" 类型也不要不标注任何类型

推荐如下:

var value:*;

不推荐:

var value;

恰当的选中最符合的类型。比如,一个循环序号应该是int类型,而不是Number,当然更不会是Object和*。再举个例子,一个mouseDownHandler应该申明其参数event的类型为MouseEvent,而不是Event

给整数使用int类型,尽管他们不可能是负数,给RGB颜色值、声音比特和其他非数字的值使用uint类型

只在值不能确定类型的时候使用*,一般情况下你应该使用Object而不是*,因为null表示"Object不存在"

如果你申明一些东西为Array类型,当明确数组要素的类型后,请立即加上/* 数组要素类型 */这样的注释,一个即将来临的版本很有可能使用表明类型的Array

推荐如下:

var a:Array /* of String */ = [];
不推荐:
var a:Array = [];

推荐做法:

function f(a:Array /* of Number */):Array /* of Object */
{
    ...
}
不推荐:
function f(a:Array):Array

--------------------------------------------------------------------------------------------------------

iterals

undefined

尽可能避免使用这个,只有在处理编译时候的*类型值和尽量节省使用*的时候才使用

 

int 和 uint 使用

在整数中不使用小数点

推荐做法:

2

不推荐:

2.
在十六进制中使用小子字母x和大写字母A-Z

推荐做法:

0xFEDCBA
不推荐:
0Xfedcba
在写一个RGB颜色值时总是使用6个字母来表示十六进制数值

推荐做法:

private const BLACK:uint = 0x000000;

不推荐:

private const BLACK:uint = 0;  
当处理索引的时候,使用-1来表示没有索引
 

Number使用(Number literals)

如果一个Number类型数值可能是分数,则注明小数点,在小数点后紧跟一个0

推荐做法:

alphaFrom = 0.0;
alphaTo = 1.0;
不推荐:
alphaFrom = 0;
alphaTo = 1;
然而不用按上面的规则对待坐标,尽管它们原则是分数,但习惯上约定是整数

推荐:

var xOffset:Number = 3;
不推荐:
var xOffset:Number = 3.0;
当使用指数标法的时候应该使用e而不是E

推荐:

1.0e12

不推荐:

1.0E12
对于一个没有设值的数值,则设置为默认值NaN
 

String使用(String literals)

使用双引号而不是单引号去划分字符串,尽管那个字符串中包换有双引号

推荐:

"What's up, \"Big Boy\"?"
不推荐:
'What\'s up, "Big Boy"?'
对于unicode编码使用\u而不是\U
 

Array写法(Array literals)

使用Array标示比new Array()更佳

推荐:

[]

不推荐:

new Array()

推荐:

[ 1, 2, 3 ]

不推荐:

new Array(1, 2, 3)

只有当需要定义数组大小时候才使用Array构造,不如new Array(3),表示[ undefined, undefined, undefined ],而不是[3]

 

Object写法(Object literals)

使用Object标示比new Object()更佳

推荐:

{}

不推荐:

new Object()

推荐:

o = { a: 1, b: 2, c: 3 };

不推荐:

o = new Object();
o.a = 1;         
o.b = 2;         
o.c = 3;
或者:
o = {};
o.a = 1;         
o.b = 2;         
o.c = 3;
 

Function写法(Function literals)

避免使用function来定义没从属的函数,使用类方法或者包函数来替代

如果你必须使用function来定义,注明返回值,在函数体中最后部分使用分号来终结

推荐:

function(i:int):void { doIt(i - 1); doIt(i + 1); }

不推荐:

function(i:int) { doIt(i - 1); doIt(i + 1) }
 

正则表达式(RegExp literals)

使用标示而不是正则表达式RegExp构造

推荐:

var pattern:RegExp = /\d+/g;

不推荐:

var pattern:RegExp = new RegExp("\\d+", "g");
 

XML and XMLList literals

使用符号标示而不是直接XML构造函数

推荐:

var node:XML = <name first="Jane" last="Doe"/>;

不推荐:

var node:XML = new XML("<name first=\"Jane\" last=\"Doe\"/>");

在XML属性值中使用双引号而不是单引号

推荐:

var node:XML = <name first="Jane" last="Doe"/>;

不推荐:

var node:XML = <name first='Jane' last='Doe'/>;
 

类写法(Class literals)

只有在导入的两个同名类时候,为了消除歧义才使用类的完成名字

推荐:

import mx.controls.Button;
...
var b:Button = new Button();
不推荐:
import mx.controls.Button;
...
var b:Button = new mx.controls.Button();

 

但对于同名类就必须要完整路径

import mx.controls.Button;
import my.controls.Button;
...
var b:Button = new mx.controls.Button();

--------------------------------------------------------------------------------------------------------

表达式(Expressions)

括号

在+, -, *, /, &&, ||, <, <=, >, >=, ==, 和 !=之类平常操作符间,避免使用不必要的括号

推荐:

var e:Number = a * b / (c + d);

不推荐:

var e:Number = (a * b) / (c + d);

推荐:

var e:Boolean = a && b || c == d;

不推荐:

var e:Boolean = ((a && b) || (c == d));

对于其他操作符,因为优先级太难记忆,所以括号有助于理解优先

 

强制类型转化(Coercion)

对于一个已经是Boolean类型的值不要跟true或者false比较

推荐:

if (flag)

不推荐:

if (flag == true)

推荐:

var flag:Boolean = a && b;

不推荐:

var flag:Boolean = (a && b) != false;

明确int,unit,Number或者String的Boolean值条件:

推荐:

if (n != 0)

不推荐:

if (n)

推荐:

if (s != null && s != "")

不推荐:

if (s)

让object引用含蓄表达Boolean值:

推荐:

if (child)

不推荐:

if (child != null)

推荐:

if (!child)

不推荐:

if (child == null)

当强制类型转换可能失败或者你想你的表达式计算出null而不是抛出异常,应该使用as操作符

推荐:

IUIComponent(child).document

不推荐:

(child as IUIComponent).document
 

比较(Comparison)

写比较表达式应该让他们读起来更自然:

推荐:

if (n == 3) // "if n is 3"

不推荐:

if (3 == n) // "if 3 is n"
 

++和--操作符(++ and -- operators)

当前置和后置等价的情况下,使用后置方式。只有在你需要在之前运行自增运算时候才使用前置

推荐:

for (var i:int = 0; i < n; i++)

不推荐:

for (var i:int = 0; i < n; ++i)
 

三元操作符(Ternary operator)

使用三元操作符来代替简单的if/else部分,特别是null的检测:

推荐:

return item ? item.label : null;

不推荐:

if (!item)
    return null;
return item.label;

但不用嵌套三元操作符来代替负载的if/else逻辑

推荐:

if (a < b)
    return -1;
else if (a > b)
    return 1;
return 0;

不推荐:

return a < b ? -1 : (a > b ? 1 : 0);
 

new操作符(new operator)

在类后加上花括号,尽管类的构造函数没有参数.

推荐:

var b:Button = new Button();

不推荐:

var b:Button = new Button;

--------------------------------------------------------------------------------------------------------

指令(Statements)

在每个指令后面加上分号,不要使用ActionScript 3的可选分号功能

推荐:

a = 1;
b = 2;
c = 3;

不推荐:

a = 1
b = 2
c = 3
 

include指令(include statements)

使用include,而不是#include,如其他指令结束后,include指令结束后也用分号

推荐:

include "../core/ComponentVersion.as";

不推荐:

#include "../core/ComponentVersion.as"

使用相对地址而不是绝对地址

 

import指令(import statements)

导入指定的类、接口和包级别这种做法优于使用*来全部导入.

推荐:

import mx.controls.Button;
import flash.utils.getTimer;

不推荐:

import mx.core.*;
 

use namespace指令(use namespace statements)

尽量避免使用命名空间;在没有打开命名空间的时候使用::符号来调用命名空间

推荐:

import mx.core.mx_internal;

// Later, in some method...
mx_internal::doSomething();

不推荐:

import mx.core.mx_internal;
use namespace mx_internal;

// Later, in some method...
doSomething();
 

if指令(if statements)

如果if/else分支区块只有一个指令,不要把它包括进去{}中

推荐:

if (flag)
    doThing1();

不推荐:

if (flag)
{
    doThing1();
}

推荐:

if (flag)
    doThing1();
else
    doThing2():

不推荐:

if (flag)
{
    doThing1();
}
else
{
    doThing2();
}

但如果任何一个分支有多个指令,把所有分支指令都囊括进相应的{}

推荐:'

if (flag)
{
    doThing1();
}
else
{
    doThing2();
    doThing3();
}

不推荐:

if (flag)
    doThing1();
else
{
    doThing2();
    doThing3();
}

当做多个错误检测时候,及早是哟偶那个连续的if指令来测试错误和相应的返回信息,成功的执行将在方法最后成功返回,不要让测试之间相互影响,那会让测试执行流动难以控制

推荐:

if (!condition1)
    return false;
...
if (!condition2)
    return false;
...
if (!condition2)
    return false;
...
return true;

不推荐:

if (condition1)
{
    ...
    if (condition2)
    {
        ...
        if (condition3)
        {
            ...
            return true;
        }
    }
}
return false;
 

for指令(for statements)

把循环体都放在{}中,尽管可能只有一个指令

推荐:

for (var i:int = 0; i < 3; i++)
{
   doSomething(i);
}

不推荐:

for (var i:int = 0; i < 3; i++)
    doSomething(i);

使用局部变量存储for循环的索引上线,这样可以在每次循环中不用重新计算

推荐:

var n:int = a.length;
for (var i:int = 0; i < n; i++)
{
    ...
}

不推荐:

for (var i:int = 0; i < a.length; i++)
{
    ...
}
在for指令{}中定义循环变量,除非在其他地方会重用

推荐:

for (var i:int = 0; i < 3; i++)

不推荐:

var i:int;
for (i = 0; i < 3; i++)
{
   ...
}
 

while指令(while statements)

把循环体都放在{}中,尽管可能只有一个指令

推荐:

while (i < n)
{
   doSomething(i);
}

不推荐:

while (i < n)
    doSomething(i);
 

do指令(do statements)

把循环体都放在{}中,尽管可能只有一个指令

推荐:

do
{
   doSomething(i);
}
while (i < n);

不推荐:

do
    doSomething(i);
while (i < n);
 

switch指令(switch statements)

取保switch区域中每个case以及default处理分支都在相应的{}中,每个分支放相应的break或者reture,而不是在分支后面,如果选择return不要在return后加入break,对待default分支也一样

推荐:

switch (n)
{
    case 0:
    {
        foo();
        break;
    }

    case 1:
    {
        bar();
        return;
    }

    case 2:
    {
        baz();
        return;
    }

    default:
    {
        blech();
        break;
    }
}

不推荐:

switch (n)
{
    case 0:
        foo();
        break;

    case 1:
    {
        bar();
    }
    break;

    case 2:
        baz();
        return;
        break;

    default:
        blech();
}
 

return指令(return statements)

不要在return中放入不必要的括号

推荐:

return n + 1;

不推荐:

return (n + 1);

在一个方法的中间返回也是可以的

-------------------------------------------------------------------------------------------------------- 

声明(Declarations)

不要在一个声明中声明多个变量或常量

推荐:

var a:int = 1;
var b:int = 2;

不推荐:

var a:int = 1, b:int = 2;
 

override关键字(The override keyword)

就现在而已,把override放在最前,而不是存取说明符(public protected private)后面

推荐:

override protected method measure():void

不推荐:

protected override method measure():void
 

存取说明符(Access specifiers)

在允许的前提下,尽可能添加上详尽的存取说明符,不要依靠internal这种如果不写就默认的存取说明符

在确定一个API是public还是protected前,想清楚它是否真的如此。Public和Protected的API都应该有相应的文档,在被正式反对前,这些都将一直被维护持续几个版本

 

static关键字(The static keyword)

现在而言,把它放在存储说明符后面

推荐:

public static const MOVE:String = &quot;move&quot;

不推荐:

static public const MOVE:String = &quot;move&quot;;
 

final关键字(The final keyword)

现在而言,把它放在存储说明符后面

推荐:

public final class BoxDirection

不推荐:

final public class BoxDirection

声明说有枚举类为final

也声明基属性已经那些有$的方法为final

 

常量(Constants)

所有的常量类型都应该是static,这样所有实例都将存储同一个值

推荐:

public static const ALL:String = "all";

不推荐:

public const ALL:String = "all";
 

变量(Variables)

如果一个变量需要初始化至不是默认值的值,把这步操作放在声明中欧偶那个而不是构成过程

推荐:

private var counter:int = 1;

不推荐:

private var counter:int;
...
public function MyClass()
{
    super();
    ...
    counter = 1;
}
 

局部变量(Local variables)

在需要第一次时候局部变量前,而不是在函数的开头

推荐:

private function f(i:int, j:int):int
{
    var a:int = g(i - 1) + g(i + 1);
    var b:int = g(a - 1) + g(a + 1);
    var c:int  = g(b - 1) + g(b + 1);

    return (a * b * c) / (a + b + c);
}
不推荐:
private function f(i:int, j:int):int
{
    var a:int;
    var b:int;
    var c:int;

    a = g(i - 1) + g(i + 1);
    b = g(a - 1) + g(a + 1);
    c = g(b - 1) + g(b + 1);

    return (a * b * c) / (a + b + c);
}

在每个函数中申明局部变量

推荐:

var a:int;
if (flag)
{
    a = 1;
    ...
}
else
{
    a = 2;
    ...
}

不推荐:

if (flag)
{
    var a:int = 1;
    ...
}
else
{
    var a:int = 2;
    ...
}

推荐:

var i:int;
for (i = 0; i &lt; n; i++)
{
    ...
}

for (i = 0; i &lt; n; i++)
{
    ...
}

不推荐:

for (var i:int = 0; i &lt; n; i++)
{
    ...
}

for (var i:int = 0; i &lt; n; i++)
{
    ...
}
 

类(Classes)

如果一个类由Object派生,这些代码可以省略

The only "bare statements" in a class should be calls to static class initialization methods, such as loadResources().

 

构造函数(Constructors)

如果一个类有实例,写一个构造函数,确保明确执行super(),尽管这步什么没有执行

如果构造函数需要设置实例变量,把他们的名字设置成一样的

推荐:

public function MyClass(foo:int, bar:int)
{
    this.foo = foo;
    this.bar = bar;
}

不推荐:

public function MyClass(fooVal:int, barVal:int)
{
    foo = fooVal;
    bar = barVal;
}

不要在构造函数中设置类变量的值,这步应该在变量的申明中完成,然而如果你需要重新设置,那就在构造函数中执行

 

接口(Interfaces)

待续(真的TBD)

 

命名空间(Namespaces)

待续

 

Implementing properties

TBD

 

Metadata

TBD

 

包(Packages)

One public API (usually a class, sometimes a namespace or function) inside the package statement.

Helper classes

bare statements

 

 

Good Luck & Have Fun!

奥运开幕式

| No Comments | No TrackBacks

一开始蛮激情澎湃的,特别是烟花脚步,还有倒计时击鼓

我们这都一致认为击鼓的表演者一定是军人

这段视频要保存呀

之后就差强人意了

最后的点火仪式就不讨论了,因为这几届都越来越看重点火仪式,大家对这个也比较关注,而且长达一个半小时多的进场仪式也没有看到大陆、香港和台湾一起手拉手进场,有点失望

其实李宁45岁的人被吊着跑了一圈也不容易

话说进场仪式中途睡了一小会,发现现场一直欢迎的mm们还是一如既往的左拍手右拍手,真是可怜呀,蹦了2个多小时,太高难度了

抱怨的话就别说了,有生之年估计也再难得在中国土地上看到一场奥运开幕式,我们大概已经没有改正的机会了,好好珍惜吧

 

同时收到一些北京留校朋友的消息,把敬意献给坚守在自己岗位的军人们,北科的朋友说守门的军人背后就一个大屏幕,他们至始至终没有看过一眼,也没有动过一下,就像雕塑一样

要签名也要军人们的,拍照留念绝对不能少了跟军人们一起的

Good Luck & Have Fun!

抱拥春意黯然处,
望尽夏涟一场空,往事了无尘
待看俯首躬耕,昏黄晚霞
冬来,依是天各一方
思念不曾减

                  --by magicianzrh

原文是:http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions

对应试着弄下,给自己留点印象,毕竟很多时候都要看Flex SDK源码,总感觉flex的帮助太多会让人不知所措

我只是自己看得时候弄弄,翻译质量也不高的,大家将就看看吧

                       ------ by magicianzrh

 

命名规则

选择好的名字对创建易用和易于理解的代码具有决定性的作用。你应该多花时间去想想是不是给你的代码选择了一个正确的名字,特别是那是公共接口的一部分的时候。

我们(指Adobe)的命名标准大部分跟ECMAScript和Flash Player 9的保持一致。

--------------------------------------------------------------------------------------------------------

缩写

缩写应该按照一定的规则。比如 calculateOptimalValue() 就比calcOptVal()好很多。

确保意思清楚比缩写更为重要。当然如果你不去缩写,开发人员也没有必要去记住你是否把qualified缩写成qual还是qlfd。

然而我们已经把一些缩写规则统一标准化了。

  • accessibility缩写为acc,比如ButtonAccImpl
  • automatic缩写为auto,比如autoLayout
  • evaluate缩写为eval,比如EvalBindingResponder
  • implementation缩写为impl, 比如ButtonAccImpl
  • information缩写为info,比如GridRowInfo
  • number of缩写为num,比如numChildren
  • minimum缩写为min,比如minWidth
  • maximum缩写为max,比如maxHeight
  • navigation缩写为nav,比如NavBar
  • regular expression缩写为regexp,比如RegExpValidator
  • utility缩写为util,比如StringUtil

这个列表或许没有把当前我们使用的所有缩写都包括进去。如果你在考虑使用一个没有列出来的缩写,请先搜索源代码确定缩写是否已经被使用。如果你没有找到,多想想缩写是不是真的适合。

偶然我们会在同一个缩写中不一致(谨慎的认为)。比如,在大多场合,我们都完整的拼写出horizontal和vertical,正如horizontalScrollPolicy和verticalScrollPolicy但我们在一些非常常用的容器HBox和VBox中缩写为H和V。

--------------------------------------------------------------------------------------------------------

取首字母的缩写

在Flex中各种取首字母的缩写是很常见的,比如AIR, CSS, HLOC, IME, MX, MXML, RPC, RSL, SWF, UI, UID, URL, WSDL, 和XML。

一个取首字母的缩写总是全大写字母或者全小写字母(比如,SWF或者swf,但从来不Swf)。唯一使用欧冠全小写字母的时候是当首字母缩写用在identifier的时候,或者在identifier的开头,和identifier应该是小写字母开头的时候。比如 CSSStyleDeclaration、IUID、uid、IIME和imeMode。

--------------------------------------------------------------------------------------------------------

命名中单词的划分

当一个识别符包含多个单词时,我们使用两个方式来区别单词间的划分:大小写划分(如LayoutManager或measuredWidth)和下划线划分(比如object_proxy)。

有时候一些单词组合已经成为一个新单词,这样导致划分不清晰,并且我们在一些地方也很不幸的发生了混乱,比如dropdown、popUp和pulldown。

当两个首字母缩写连在一起的时候我们根据首字母缩写规则命名。loadCSSURL()就是一个很好的例子,尽管很少使用,不过应该尽量避免这种命名。

--------------------------------------------------------------------------------------------------------

指定类型命名

如果你想在命名中统一类型,把它放在命名的最后一部分。别在使用老的ActionScript 1的把类型作为衔尾部分连接上去的习惯,如把_mc放在最后来表示类型。现在命名一个名字为boarder的Shape,按新规则是border、borderShape或者borderSkin,但不会是border_mc。

一般的,最好的为一个物品命名就是把它的类型简单的作为它的名字

var button:Button = new Button();

--------------------------------------------------------------------------------------------------------

Package命名

命名开始用小写字母并且用首字母大小写划分后面的单词:controls、listClasses。

Package命名应该总是名词或者动名词(就是动词后面加上ing),不要用动词,形容词或者副词。

一个包含许多类似的功能代码的Package应该有个一个复数的名字:charts,collections, containers, controls, effects, events, formatters, managers, preloaders, resources, skins, states, styles, utils, validators。

一个表明一个概念的package通常使用一个动名词作为名字:binding, logging, messaging, printing。否则他们应该使用概念名词accessibility, core, graphics, rpc。

一个包含支持FooBar组件功能类的package应该命名为 fooBarClasses。

--------------------------------------------------------------------------------------------------------

文件命名

对于重要的公共接口,文件命名必须跟里面的公共接口一样的名字,但对于包含的文件就不用按照这样的规则。

对于如[Style(...)]标签之类的被包括文件,命名开始用大写字母,之后用首字母大写来划分,最后以Styles来结尾:BorderStyles.as,ModalTransparencyStyles.as。

对于独立的资源,名字开头使用小写字母之后用下划线划分单词:icon_align_left.png。

--------------------------------------------------------------------------------------------------------

Namespace(命名空间)命名

开始使用小写字母之后用下划线划分单词:mx_internal,object_proxy。

--------------------------------------------------------------------------------------------------------

Interface(接口)命名

以"I"开头之后用首字母大写来区分单词: IList, IFocusManager, IUID。

--------------------------------------------------------------------------------------------------------

类命名

以首字母大写开头之后以同样规则处理接着的词汇: Button, FocusManager, UIComponent。

命名Event(事件)子类如FooBarEvent;

命名Error(错误)子类如FooBarError;

命名EffectInstance(效果实例)子类,并且子类作用于FooBar为FooBarInstance;

命名Formatter(格式化)子类如FooBarFormatter;

命名Validator(检测器)子类如FooBarValidator;

命名skinning classes皮肤外表类如FooBarBackground, FooBarBorder, FooBarSkin, FooBarIcon, FooBarIndicator, FooBarSeparator, FooBarCursor, etc。

命名utility classes(工具类)FooBarUtil (而不是FooBarUtils,包命名采用复数而类采用单数).

通常命名基类如ComboBase, DateBase, DataGridBase, ListBase。

--------------------------------------------------------------------------------------------------------

Event(事件)命名

以首字母小写字母开头之后以单词首字母大写来区分单词:"move", "creationComplete"。

--------------------------------------------------------------------------------------------------------

Style(样式)命名

以首字母小写字母开头之后以单词首字母大写来区分单词:color, fontSize。

--------------------------------------------------------------------------------------------------------

Enumerated values for String properties

以首字母小写字母开头之后以单词首字母大写来区分单词:"auto", "filesOnly"。

--------------------------------------------------------------------------------------------------------

常量命名

全字母大写并且单词间用下划线分开: OFF, DEFAULT_WIDTH。

命名中的词必须与常量定义值中的匹配:

public static const FOO_BAR:String = "fooBar";

--------------------------------------------------------------------------------------------------------

属性(变量和getter/setter)命名

以小写字母开始以单词首字母大写来区分:i, width, numChildren.

使用i作为循环序号,n作为上限值,使用j作为循环内的循环的序号,m作为上限值。

for (var i:int = 0; i < n; i++)
{
    for (var j:int = 0; j < m; j++)
    {
        ...
    }
}
使用p作为for-in循环的变量
for (var p:String in o)
{
    ...
}
如果一个类重写一个getter/setter并且想接着使其有效,应该在其基类对其命名前加上$作为新命名,并使用final关键字。
mx_internal final function get $numChildren():int
{
    return super.numChildren;
}

--------------------------------------------------------------------------------------------------------

存储变量命名

使用getter/setter,并在命名加上_foo.

--------------------------------------------------------------------------------------------------------

方法命名

以小写字母开始,之后以首字母大写来划分单词:measure(), updateDisplayList().

方法的名字应该是动词。

对于没有参数的方法一般不会命名为如:getFooBar()或者setFooBar(),应该用getter/setter替代掉。然而,如果getFoobar()是一个需要大量运算的方法,则应该命名为findFooBar(),calculateFooBar(),determineFooBar()等,而不是一个getter。

如果一个类重写一个getter/setter并且想接着使其有效,应该在其基类对其命名前加上$作为新命名并使用final关键字。

mx_internal final function $addChild(child:DisplayObject):DisplayObject
{
    return super.addChild(child);
}

--------------------------------------------------------------------------------------------------------

事件处理命名

事件处理命名在事件类型后面加上Handler:mouseDownHandler()

如果处理的事件是由子组件发出的,在事件名字前加上字组件的名字并用下划线连接:textInput_focusInHandler()

Argument names

在每个setter中使用value作为传入参数:

推荐方式:
public function set label(value:String):void

不推荐:

public function set label(lab:String):void

public function set label(labelValue:String):void

public function set label(val:String):void

在事件处理函数中使用event作为传入参数(而不是e、evt或者eventObj)

在事件处理函数中使用event (而不是e, evt或者eventObj)作为传入参数:

protected function mouseDownHandler(event:Event):void

--------------------------------------------------------------------------------------------------------

绑定资源命名

如果绑定资源为特别的包包含了些资源,则取与包相同的名字:controls, {formatters}, validators.

--------------------------------------------------------------------------------------------------------

多种命名法则

避免使用object因为它意思含糊

item应该在作为数据单体(data item)命名中使用,而不是一个显示物体(DisplayObject)

renderer表示显示数据的显示物体

type表示是一个AS3的类型,如果不是,用kind表示.

 

有空再弄完之后的

Good Luck & Have Fun!

FileReferenceList.jpg

 

 

 

 

 

 

 

 

先上个图吧,之后就是代码啦

FileReferenceList Sample.zip

FileReferenceList其实跟FileReference差不多,其实就是一个ArrayCollection

因为这只是个测试,所以后台很简单

<?php
$uploaddir = 'upload_files/';
$uploadfile = $uploaddir . basename($_FILES['Filedata']['name']);
$temploadfile = $_FILES['Filedata']['tmp_name'];
move_uploaded_file($temploadfile , $uploadfile);
?>

当然实际中得加上上传完后的返回值,这个对应as3中应该用flash.events.DataEvent.UPLOAD_COMPLETE_DATA事件,我就偷个懒

用了DataGrid,同时就用用Itemrenderer,这里Itemrenderer component单独写了一个组件,在src/component文件夹下

UploadProgress.mxml 

<?xml version="1.0" encoding="utf-8"?>
<!--              -->
<!-- @author magicianzrh     -->
<!--              -->
<!--              --> 
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="280" height="35" creationComplete="myInit();">
 <mx:Script>
  <![CDATA[
   import mx.events.FlexEvent;
   public function clickCancelHandle():void {
    owner.dispatchEvent(new FlexEvent(Event.CANCEL));
   }
   
   private function myInit():void {
    bar.addEventListener(ProgressEvent.PROGRESS,  progressHandle);
   }
   
   private function progressHandle(e:ProgressEvent):void {
    if (bar.value == data.fileRef.size) {
     data.uploaded = true;
    }
   }
  ]]>
 </mx:Script>
 <mx:ProgressBar x="10" y="14" id="bar" source="{data.fileRef}" label=" " maximum="100" minimum="0"/>
 <mx:Button x="220" y="4" label="取消" click="clickCancelHandle();"/>
</mx:Canvas>

--------------------------------------------------------------------------------------------------------

Forum98Upload.mxml

<?xml version="1.0" encoding="utf-8"?>
<!--              -->
<!-- @author magicianzrh     -->
<!--              -->
<!--              --> 

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="myInit();">
 <mx:Script>
  <![CDATA[
   import mx.collections.ArrayCollection;
   import mx.controls.Alert;
   private const _description:String="上传文件";
   private const _extension:String="*.txt;*.jpg";
   private const _url:URLRequest = new URLRequest("http://localhost/upload.php");

   private var _fileRefList:FileReferenceList;
   //the list dataProvider
   [Bindable]
   private var _uploadFilesList:ArrayCollection;
   
   private function myInit():void {
    
    _uploadFilesList = new ArrayCollection();
    _fileRefList = new FileReferenceList();
    _fileRefList.addEventListener(Event.CANCEL,  canelHandle);
    _fileRefList.addEventListener(Event.SELECT,  selectHandle);
    //UploadProgress Component control the event dispatch
    //UploadProgress组件控制事件的发送
    myDataGrid.addEventListener(Event.CANCEL,  canelUploadHandle);
   }
   
   private function canelUploadHandle(e:Event):void {
    trace((e.target as DataGrid).selectedItem);
    if (_uploadFilesList[(e.target as DataGrid).selectedIndex].uploaded) {
     //the file has uploaded,en,if you want to delete maybe you should modify the php file
     Alert.show("都上传好了,要删除嘛自己改改php","嘿嘿");
    }else {
     //canel the upload...
     Alert.show("你想取消上传?那好吧","嘿嘿");
     _fileRefList.fileList[(e.target as DataGrid).selectedItem].canel();
    }
   }
   
   private function canelHandle(e:Event):void {
    Alert.show("来嘛,选一点上传嘛","友情提示下");
   }
   
   private function selectHandle(e:Event):void {
    
    for (var i:int=0; i<_fileRefList.fileList.length;i++) {
     addIntoList(_fileRefList.fileList[i]);
    }
   }
   
   private function addIntoList(file:FileReference):void {
    var fileObj:Object = {name:file.name,size:Math.round(file.size/1024),fileRef:file,uploaded:false};
    _uploadFilesList.addItem(fileObj);
    file.addEventListener(Event.COMPLETE,  uploadCompleteHandle);
    file.addEventListener(Event.OPEN,           fileOpenHandle);
    file.addEventListener(HTTPStatusEvent.HTTP_STATUS,    httpStatusHandle);
    
   }
   
   private function getFileFilter():Array {
    return new Array(getTextFileFilter(),getImageFileFilter());
   }
   
   private function uploadCompleteHandle(e:Event):void {
    //
   }

   private function httpStatusHandle(e:HTTPStatusEvent):void {
    //check the network
    Alert.show("丫的,估计网络又断了","HTTP错误");
   }
   
   private function fileOpenHandle(e:Event):void {
    // upload start
   }
   
   private function getTextFileFilter():FileFilter {
    //Txt file filter
    return new FileFilter("文本文件","*.txt");
   }
   
   private function getImageFileFilter():FileFilter {
    //image file filter
    return new FileFilter("图片","*.jpg;*.jpeg;*.gif");
   }
   
   private function broswer():void {
    _fileRefList.browse(getFileFilter());
   }
   
   private function uploadHandle():void {
    for each (var i:* in _fileRefList.fileList) {
     (i as FileReference).upload(_url);
    }
   }
  ]]>
 </mx:Script>
 <mx:DataGrid x="0" y="0" width="483" height="152" rowHeight="35" dataProvider="{_uploadFilesList}" id="myDataGrid">
  <mx:columns>
   <mx:DataGridColumn headerText="文件" dataField="name"/>
   <mx:DataGridColumn headerText="大小(K)" dataField="size"/>
   <mx:DataGridColumn headerText="上传进度" width="280" itemRenderer="component.UploadProgress"/>
  </mx:columns>
 </mx:DataGrid>
 <mx:Button x="373" y="160" label="浏览" click="broswer();"/>
 <mx:Button x="429" y="160" label="上传" click="uploadHandle();"/>
</mx:Application>

 

DataGrid我是直接用了数据绑定了一个ArrayCollection,ProgeressBar作为itemRenderer component一部分,进度条source绑定了FileReference,省去了不少的代码,作为检测每个文件上传的进度,直接读取麻烦,所以也直接在ArrayCollection下操作了上传完成与否的值,数据驱动嘛

--------------------------------------------------------------------------------------------------------

看到项目名Forum98...没错,是98论坛的上传文件的功能模块

当然不能就上面的代码就完成了的,我可不想被Karmico追着砍,嗯,还要去他那蹭汤喝呢

--------------------------------------------------------------------------------------------------------

需要完善的功能以下:(当然那个就不公布出来了)

后台代码检测判断上传的权限

读取后台返回来的上传文件的规格大小作为初始值

上传过程中对页面的回执操作--估计是通过js吧

上传完成后的判断检查,这个上面提到过了

取消上传后应该在DataGrid中删除相应的条目

目前上传中文名文件在服务器端文件名会乱码,这个嘛是php的问题,当然一般会采用上传的文件名,自然也要返回文件地址的,作为上传完成的一个步骤 

 

最后说个就是98论坛可以校外访问了,当然不是指rvpn访问,http://www.zju98.com,希望不要历史重演就好,我的vpn可是一年来没有充过费,尽管我不用rvpn我也可以在校网网络上cc98,o(∩_∩)o...哈哈

Good Luck & Have Fun!

好久没有来弄blog,弄得杂草这么多

虽然这几天设计了几个模板,不过还是不换了,怎么看都是现在这个简洁,尽管是默认的,不过我很喜欢

最近作息有点颠倒,不过距离开学还有这么久,这段时间也可以真的算无忧无虑吧

把页面上一些无关的东西移除掉好了,就留个msn好了

 

没想到五点多就能看到朝阳,这么久没有去欣赏过,我才明白为什么这么多人喜欢摄影,不过我还是不习惯去拍摄,如果真的淡忘了,不也挺好的吗

看来我真的太不敏感了,就像如果要重新搞土木,其实我觉得真的好像也没什么所谓的,好多事情我决定不了,安排好的,我越来越不想去改了,算了,肯定是的一定能解决掉,何必去担忧太多

现在也不错,好像没什么烦恼了,半年来终于可以真正静下心来期待点什么,比如期待马上可以开始的羽毛球或者接下来的早餐,好像回到高中了

So Good Luck & Have Fun

无意间发现的一个网站,是一个flash画图板http://www.myoats.com/create.aspx

当然功能不是简单的记录数组了,我最喜欢的是SIDES功能,选择"镜像数目"(姑且这么说吧)还是5面是最完美的,让我想起很久很久以前(应该是初中)用圆规和没有刻度的直尺去画一个五角星

最喜欢是把TOOLS设置为圆,在5镜像中随便画,总感觉很优美

如果学过剪纸的人估计会弄得很好,毕竟对称性很好,也可以看看很多人的作品

http://www.myoats.com/comments.aspx?p=0&wd=22534

http://www.myoats.com/comments.aspx?p=0&wd=23076

这两个我比较喜欢

Good Luck & Have Fun!

About this Archive

This page is an archive of entries from August 2008 listed from newest to oldest.

July 2008 is the previous archive.

September 2008 is the next archive.

Find recent content on the main index or look in the archives to find all content.

3D Live Statistics