Flex ArgumentError:ItemRenderer中的错误#2025

时间:2010-07-09 17:37:40

标签: flex itemrenderer

我在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);
     }
  }

2 个答案:

答案 0 :(得分:0)

我以前见过这种事。此错误可能发生在AdvancedDataGrid本身,而不是itemRenderer。

有关详细信息,请参阅http://www.judahfrangipane.com/blog/?p=196

如果您只想在特定行上绘制某些内容,可以尝试扩展AdvancedDataGrid以覆盖两个函数:

override protected function drawHorizontalLine(s:Sprite, rowIndex:int, color:uint, y:Number):void {
  // do some drawing 
}

override protected function drawRowBackground(s:Sprite, rowIndex:int, y:Number, height:Number, color:uint, dataIndex:int):void {
  // do some drawing 
}

答案 1 :(得分:0)

如果有人在看这个,这就是答案。 我仍然不确定问题是什么,但是AdvancedDataGrid当然不喜欢我将一个Label作为子项添加到渲染器中。这是我如何解决它..将一个TextField作为子项添加到精灵中,如下所示:

        var newLabel:TextField = new TextField();
        newLabel.text = plan.planner.label;
        newLabel.rotationZ = 270;
        newLabel.visible = true;
        newLabel.x = curX - (dividerWidth / 2) - ((newLabel.textHeight) / 1.5);
        newLabel.y = height - (RADIUS * 2.5);
        newLabel.antiAliasType = AntiAliasType.ADVANCED;

        sprite.addChild(newLabel);

希望这有助于某人!