我有一个继承组的组件。我创建了一个名为dataSource:ArrayList的属性。我想为每一个条目划一条线。
当调用'function‘-method时,我执行以下操作(简化):
var newLine:Line = new Line(); newLine.stroke = new SolidColorStroke(); newLine.xFrom = 0; newLine.yFrom = 0; newLine.xTo = 0; newLine.yTo = height; this.addElement(newLine);
这条线本身不会延伸到父级的最底层。我猜我搞砸了生命周期,但我并不认为flex生命周期特别容易理解,所以我不知道该如何做。
发布于 2010-07-27 04:45:12
如果您不想将该行作为显示列表中的对象进行交互,我只需使用updateDisplayList()使用图形api绘制它,然后从set dataSource()调用invalidateDisplayList()
“正确”方式略显冗长;-)
private var dataSourceValid = true;
public function set dataSource(value:FooData):void {
_dataSource = foo;
dataSourceValid = false;
invalidateProperties();
}
override protected function commitProperties():void {
if (!dataSourceValid)
commitDataSource();
// Do it later in case we've invalidated something
// belonging to Flex while validating our stuff
super.commitProperties();
}
protected function commitDataSource():void {
// Do whatever we need to with our datasource,
// including adding or removing child elements.
// ...
// If we also need to re-draw something, then
// invalidateDisplayList();
dataSourceValid = true;
}(所有输入的代码都是用TextMate编写的,所以它可能充满了拼写错误,而且没有编译,但是您了解到了)
发布于 2010-07-26 17:05:56
我同意您的看法,这可能与创建行时尚未正确测量的组件有关。您可以尝试重写updateDisplayList并将您创建的行的高度设置为提供给updateDisplayList方法的高度参数。不要在updateDisplayList中创建行,因为它可以在组件生命周期中被多次调用。关于生命周期,这里有一个链接,我在过去发现了一个有用的图表:http://danorlando.com/?p=122希望,帮助。
发布于 2010-07-29 10:22:14
目前还不完全清楚您想要做什么,但是通过在dataSource上添加一个Group属性,似乎您正在尝试重新创建DataGroup。也许您应该考虑只使用后者,同时使用自定义ItemRenderer,您可以在其中画一条线吗?
https://stackoverflow.com/questions/3331289
复制相似问题