我陷入了一种我没想到的行为,请解释我理解并解决它。 - 问题如下:我有一个持有标签的类,这个类在itemRenderer中使用,因为整个事情都有异常,但它不会显示标签的文本。 我试过添加一个Button但问题仍然存在 - 它实际上从未添加过按钮。
为什么?
public class BusTreeNode extends UIComponent
{
protected var label : Label;
public function BusTreeNode()
{
super();
label = new Label();
this.addChild( label );
label.x = 40;
label.y = 2;
label.text = "test";
}
}
...在itemRenderer中:
<sl:BusTreeNode width="100%" />
答案 0 :(得分:2)
我想问题是你的measure()
课程中没有BusTreeNode
实施。所以你的组件默认大小为0x0。这个声明:
<sl:BusTreeNode width="100%" />
仍然给出0作为高度。
您可以阅读有关测量here的Flex组件的更多信息。 this article对于创建自定义组件非常有用。
答案 1 :(得分:1)
从Spark(或Flex 3中的mx)ItemRenderer类扩展起来更容易。像这样创建一个新的MXML文件:
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" >
<!-- label -->
<s:Label id="labelDisplay" />
</s:ItemRenderer>
'labelDisplay'的'text'属性将由其使用的List(或其他数据组件)自动设置。
此外,在Flex组件生命周期中,应将可视元素添加到createChildren()方法中的displayList。因此,如果你绝对想用纯ActionScript编写它,你可以这样做,但它更难:
public class MyItemRenderer extends ItemRenderer {
private var button:Button;
override protected function createChildren():void {
super.createChildren();
button = new Button();
addElement(button);
}
override public function set label(value:String):void {
super.label = button.label = value;
}
}