使用ItemRenderer处理基于List容器的显示内容 [DataGrid, Tree, List等]

Categories: Flex; Tagged with: ; @ January 6th, 2009 0:52

具体的情况如:使用labelFunction处理DataGrid显示内容 , 只是这里使用的是ItemRender来实现并实现更多功能.

如Student中有一Gender_属性, 1表示男生, 2表示女生, 3表示未知, 现在有下要求:

1. 在DataGrid中不可以显示1, 2,3, 应显示 男女 [ 该功能可由LabelFunction实现],

2. 如果为男生,, 则”男生”颜色为红色, 女生颜色为默认, 未知字体大小为10号

具体实现:

			var columnGender:DataGridColumn = new DataGridColumn();
			columnGender.headerText = "Gender";
			columnGender.dataField = "Gender_"; //使用ItemRender
			columnGender.itemRenderer =  new ClassFactory(Gender_Label);
			//columnGender.labelFunction = formatGender;

			_dataGridStudent.columns = [columnID, columnName, columnAge, columnGender];

ItemRender实现: 该类将继承List, 重写其UpdateDisplayList函数, 如下:

package com.test.itemRender
{
import mx.controls.Label;
import mx.controls.listClasses.ListBase;

public class Gender_Label extends Label
{
	/**
	 * 构造函数
	 */
	public function Gender_Label() {
		super();
	}

	override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
		super.updateDisplayList(unscaledWidth, unscaledHeight);
		if(data.Gender_ == 1) {
             setStyle('fontSize',14);
             setStyle('fontWeight', 'bold');
             setStyle('color', 0xDD0000);
             this.text = "男生";
		 }else if(data.Gender_ == 2) {
		 	setStyle('fontSize',14);
		 	this.text = "女生"
		 }
		 //otherwise, return the label to its regular state
		 else {
		     setStyle('fontSize', 10);
             this.text = "未知";
		 }
	}

}// end of class
}// end of package

最终效果:

image

Flex中XML的处理

Categories: 垃圾山; Tagged with: ; @ November 11th, 2008 23:26

今天老子太累了….一日一类扛不住了…先把以前的笔记发上来撑着吧…
ECMAScript for XML (E4X)是一扩展了ECMAScript(JavaScript)的程式语言,它增加本地XML支持,为ECMAScript程序员提供了一种感觉直观的方式来访问XML文档。

Flex中XML对象的创建

//通过表达式直接创建XML对象[省略]
//通过XML对象的构造函数创建XML对象[省略]
//通过Array中Object建立.
	 /**把所有person从数组Parry种提出来,并转换为XML格式,
		 */
		 public static function allPersonsToXml():XML {
		 	var i:int;
			var flexXML:XML = 
			for (i=0;i

访问XML:

E4X提供两种工具来访问一个XML层次结构中的数据:

    XML和XMLLIst内容访问方法(attribute(),attribute()…等

    具有点(.), 后裔(..), 和属性(@) 运算符的变量风格访问

在XML文档中,有一部分数据是以节点方式存在的.在使用XML对象过程中,除了使用节点之外,对于XML节点属性的访问也尤为重要.在AS3.0中,最基本属性访问方式就是使用”@”操作符.可以通过@操作符加属性名称的方式直接访问节点的属性.

Var flexXML : XML = 

      Flash CS3
      Flash 8
      Flex3


      Google Ajax1.0


//通过@访问属性
Trace(flexXML.FlashPlayer.@version);  //9
Trace(flexXML.FlashPlayer.Flash.@version); //9
Trace(flexXML.FlashPlayer.@*.toXMLString);
//输出:
//9
//Adobe
//使用attribute访问,
Trace(flexXML.FlashPlayer.attribute(“version”);
Trace(flexXML.FlashPlayer.attribute(“*”);

遍历XML节点

/**用for in遍历数组中的Student,并插入到Paryy中.
*/
for (var name:String in novel.child("Student")) {
PArray.push(
new Student(novel.child("Student")[name].Name,
int(novel.child("Student")[name].Age)
)
);
} // End: for each Student

ActionScript3.0中的参数传递方式

Categories: 垃圾山; Tagged with: ; @ November 11th, 2008 21:34

对于ActionScript3.0而言, 函数提供两种参数传递方式: 值传递和引用传递,也就是我们常说的传值和传地址.如果通过值传递参数, 实际上在函数处理过程中,只改变副本的值, 对原先的值并没有改变. 如果是引用传递, 则直接传递变量本身, 这样在处理过程中可能会改变本身的值.

值传递[传值]

ActionScript3.0中的基本数据类型: Boolean, Int, Uint, Number, String都属于值传递.

如下:
var s:String = "liguoliang";
var s1:String = s;
s = "xx";
trace("s: " + s + " s1: " + s1); //s: xx s1: liguoliang

整个过程如下:
1. 创建一个对象1,通过s获得引用, 类型为String, 内容为"liguoliang";
2. 创建另外一个对象2, 通过s1获得引用, 类型为String, 内容为"liguoliang";
3. 创建另外一个对象3, 通过s引用, 而对象一将在下次垃圾收集时,被清除.

引用传递[传地址]

在ActionScript3.0,使用参数的值实际上是创建了一个参数的副本. 除了基本数据类型之外, 其他全部使用引用传递方式进行参数传递.

var a:Array = [‘one’, ‘two’];
var a1:Array = a;
a.push(‘three’);
trace("a: " + a + " a1: " + a1);  //a: one,two,three a1: one,two,three

过程如下:

1. 创建对象1, 通过1获得因哟哦那个, 类型为array, 内容为[‘one’, ‘two’];
2. 创建指向1的引用2.  1, 2 指向同一个数组.
3. 修改该数组.

[一日一类_007]TopLevel: String

Categories: 垃圾山; Tagged with: ; @ November 10th, 2008 23:24

String类是ActionScript中描述字符串的类. 该类提供了处理字符串的属性与方法. 可以使用String()方法将各种类型的对象转换为Sring.

String是AS中文本的基础.一个字符串由零个或零个以上的字符组成.AS支持Unicode和ASCII两种文本编码格式.String可以通过直接赋值和new关键字两种方式创建.由单引号或双引号表示,必要的时候应使用转义字符’/’.

Public Properties

length:int

返回该String的长度.

Public Methods

String(val:String): 构造函数,新建一个String.
charAt(index:Number=0):Number: 返回在某个inidex的字符
charCodeAt(index:Number=0):Number  返回某个index的字符对应的Unicode字符码
concat(..args):Stirng: 连接两个字符串.
fromCharCode(charCodes):String 将某Unicode字符码转换为String
indexOf(): 从左向右找到的第一个目标的index
lastIndexOf(): 从左向右最后一个…也就是从右向左第一个.
localeCompare(): 判断连个字符串是否完全相同, 若返回值为0,则表示相同,其他值表示不同
replace:替换
search(): 从左向右第一个目标的index
slice(): 返回连个index之间的String
split(): 使用间隔符,将String分割为多个String,并放入数组中.
subStr(): 从某index开始向后的特定数目内返回的String
subString(): 类似slice();

public function init():void {
	var s:String = "liguoliang";
	var s1:String = ".com";
	var s2:String = "liguoliang";
	trace("s的长度: " + s.length);
	trace("第0个字符: " + s.charAt(0));
	trace("s连接s1: " + s.concat(s1));
	trace("65对应的char: " + String.fromCharCode(65));
	trace("第一个l的位置" + s.indexOf("l"));
	trace("从index为2的字符开始向右找到的第一个l的index: " + s.indexOf("l",1));
	trace("从右向做找到的第一个l的index: " + s.lastIndexOf("l"));
	trace(s.localeCompare(s2)); //如果返回值为零,则表示两个字符串完全相同, 如果返回值非零,则表示不同.
	trace("将li替换为s2: "+ s.replace("li", s2) + "  " + s);
	trace("从左向右搜索到的第一个L: " + s.search("l"));
	trace("子字符串: " + s.slice(0, 1)); //不包括最后一个...如果参数为空,则置为-1.两参数都为空时,取全部
	trace("子字符串:从index为0开始,取两个字符 " + s.substr(0, 2));//也不包括最后一个...
	trace("子字符串: " + s.substring(0, 1));
	trace(s.split("i")); //返回l,guol,ang,若将最大值限制为2,则表示数组中进放入2个返回l,guol
}

字符串大小写转换:flexstr.toLowerCase(); flexstr.toUpperCase();
其他对象转换为String.在默认情况下,所有的AS对象都可以转换为String类型.每一个类都有一个toString方法.
通过toString可以将对象转换为String.

[千斤顶之一日一类006]TopLevel:Math

Categories: Flex; Tagged with: ; @ November 7th, 2008 0:05

Math类中包含了常用数学运算的函数与值, 如正弦,PI等. 我那曾经扎实的数学根基竟然经不起时间的考验—似乎什么都记不起来了…API太高估我的实力了, 只给出了一个角度弧度互换的公式…

Math类中最多的函数莫过于正弦余弦,正切余切之类的了,想了半天才想起来一个正弦, 概念想不起来了,只是记得个曲线图….

public function init():void {
trace(Math.abs(-1)); //1
trace(Math.PI); //3.141592653589793
trace(Math.sin(Math.PI/2));//1
trace(Math.asin(1)); //1.5707963267948966

trace(Math.random());

trace(Math.round(2.1)); //四舍五入 2
trace(Math.ceil(2.1)); //首位加一 3
trace(Math.floor(2.1)); //收尾 2
}

注意部分函数的参数不是角度,而是弧度.

角度与弧度的换算:[API还是比较体贴的…]

radians = degrees * Math.PI/180
degrees = radians * 180/Math.PI

Newer Posts <-> Older Posts



// Proudly powered by Apache, PHP, MySQL, WordPress, Bootstrap, etc,.