chat Union项目中,使用Accordion组件显示主持人列表和客人列表,这个组件放在一个Movie Clip中,实例名称为actorListac。这个Movie Clip关联ActorList类。它将2个List组件作为自己的child Symbol。一个实例名称为emceelist,一个实例名称为roomlist。

ActorList类的主要内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import mx.controls.List;
import mx.containers.Accordion;
class ActorList {
private var actorListac:Accordion;
function ActorList(){
}
private function onLoad(){
var accw = actorListac.width-2;
var acch = actorListac.height-22*2; //每个标题22像素高,共两2个标题
actorListac.roomlist.setSize(accw,acch);
actorListac.emceelist.setSize(accw,acch);
}
public function reFresh(arr:Array, at:String):Void{
//at:要刷新的列表类型,值为emcee或room
actorListac[at+"list"].removeAll();
for(var i in arr){
actorListac[at+"list"].addItem(arr[i]);
}
}
}

编译的时候出现了错误:

错误 第 26 行: 没有名为’roomlist’的属性。
actorListac.roomlist.setSize(accw,acch);

这是很让人费解的。因为使用调试器查看程序结构的时候,明明是可以看到roomlist是处于actorListac之中,但却不能够访问?

为了确定Accordion组件确实可以使用这种访问方式,我做了一个简单程序进行测试:

1
2
3
4
var accw = actorListac.width-2;
var acch = actorListac.height-22*2; //每个标题22像素高,共两2个标题
actorListac.list1.setSize(accw,acch);
actorListac.list2.setSize(accw,acch);

仅就这个程序而言,我的访问方式没有一点问题。

无奈改了一种访问方式,将 actorListac.roomlist.setSize(accw,acch); 改为了
actorListac["roomlist"].setSize(accw,acch); ,没想到居然就可以了!

留言

2005-09-29
次访问