我在as3中使用手风琴列表在谷歌地图上显示标记群集信息。出于某种原因,当前选定的子容器(vbox)部分地由下一个容器的标签覆盖。手风琴列表似乎越长,容器的面积就越大。我试图将resizeToContent
属性设置为true / false但似乎都不起作用。这是自定义手风琴类(list
是一个标记infowindow对象的数组,它也扩展了UIComponent
):
package{
import mx.containers.Accordion;
...
public class AccordionWindow extends UIComponent{
public function AccordionWindow(list:Array){
var panel:Box = new Box();
panel.width = 300;
panel.height = 200;
addChild(panel);
var acc:Accordion = new Accordion();
acc.percentWidth = 100;
acc.percentHeight = 100;
for (var i:int = 0; i < list.length; i++)
{
var vbox:VBox = new VBox();
vbox.label = "Item" + String(i);
vbox.addChild(list[i]);
acc.addChild(vbox);
}
panel.addChild(acc);
}
}
有什么想法吗?
答案 0 :(得分:0)
我不确定问题究竟是什么原因,但这里有一些应该有所帮助的想法。
您需要使用super()语句启动构造函数。
public function AccordionWindow(list:Array) { super();}// any other code you might have in your constructor. // generally, you'll want to store arguments in instance properties. // maybe something like this: this.list = list;
抱歉 - 不知道为什么我在代码格式化方面遇到这么多麻烦......
根据您发布的代码,看起来AccordionWindow类用于创建Accordion并将其放入Box中。也许你有特定的需要以你尝试的方式做事,但根据我的经验,扩展Box而不是UIComponent会更有意义。
您可能会遇到创建子项并将其添加到构造函数中的阶段的问题。相反,覆盖受保护的createChildren方法,并将构造函数中当前具有的所有代码移动到该方法。
自动调用createChildren,因此除了覆盖它并将代码移入其中之外,您不必执行任何操作。
override protected function createChildren():void
{
super.createChildren(); // very important. do not leave this out.
// paste the code that is currently in the constructor here
}
有关http://danorlando.com/?p=122的UIComponent生命周期的非常有用的帖子。