我在 Flex 3.5 的 ItemRenderer 中遇到了问题。我查看了有关此错误的其他帖子,但仍然无法弄清楚。ItemRenderer 是 AdvancedDataGrid 的一部分,其数据提供者是 HierarchicalData。我收到 ArgumentError 但跟踪没有转到我的任何代码。我已经在调试模式下经历了很多次,但它看起来直到我的代码运行后才会发生。很奇怪。
项目渲染器有几个不同的部分。它根据 xml 数据确定应该绘制的行,然后适当地添加标签和精灵。如果有人可以提供帮助,那将是一个很大的帮助!谢谢!
如果 itemrenderer 在某一行上,这是调用的方法之一。
private function addLabels(planList:ArrayCollection):void {
height = 0;
var sprite:Sprite = new Sprite();
var curX:Number = (width / planList.length);
height = 110;
for each (var plan:Plan in planList) {
var label:Label = new Label();
label.text = plan.planner.label;
label.rotationZ = 270;
label.visible = true;
label.x = curX - 7;
//Draw line divider
curX += (width / planList.length);
addChild(label);
label.move(label.x, height - 30);
//Draw divider line
sprite.graphics.lineStyle(.5, 0x000000);
sprite.graphics.moveTo(label.x - ((width / planList.length) / 2) + 10.5, 0);
sprite.graphics.lineTo(label.x - ((width / planList.length) / 2) + 10.5, height - 28);
//Draw meatball
sprite.graphics.beginFill(0x00FF33);
sprite.graphics.drawCircle(label.x + 10, height - 15, 10);
sprite.graphics.endFill();
}
rawChildren.addChild(sprite);
}
还有另一个函数在不同的行上被调用,但如果我注释掉上面的代码一切正常,所以我的猜测是问题肯定出在那儿。谢谢您的帮助!
这里是 addLabels 被调用的地方:
override protected function createChildren():void {
removeAllChildren();
var count:int = rawChildren.numChildren;
for (var i:int = 0; i < count; i++) {
if (rawChildren.getChildAt(0).parent) {
rawChildren.removeChildAt(0);
}
}
var allPlans:ArrayCollection = new ArrayCollection();
if (_plan) {
getAllPlans(_plan, allPlans);
}
if (_name == "capability") {
}
else if (_name == "components") {
height = 130;
width = 335;
addLabels(allPlans); // <-- RIGHT HERE!
var sprite:Sprite = new Sprite();
sprite.graphics.lineStyle(.5, 0x000000);
sprite.graphics.moveTo(0, 0);
sprite.graphics.lineTo(width, 0);
sprite.graphics.moveTo(0, height - 28);
sprite.graphics.lineTo(width, height - 28);
rawChildren.addChild(sprite);
}
}