首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ItemRenderer ArgumentError: Flex中的错误#2025

ItemRenderer ArgumentError: Flex中的错误#2025
EN

Stack Overflow用户
提问于 2010-07-10 01:37:40
回答 2查看 811关注 0票数 0

我在Flex3.5的ItemRenderer中遇到了一个问题。我已经看过关于这个错误的其他帖子,但仍然不能解决它。ItemRenderer是AdvancedDataGrid的一部分,后者的数据提供程序是HierarchicalData。我正在获取ArgumentError,但是跟踪没有到达我的任何代码。我已经在调试模式下经历了无数次,但它看起来直到我的代码运行后才会发生。很奇怪。

项目渲染器有几个不同的部分。它会根据xml数据计算出应该为哪一行绘制,然后适当地添加标签和子画面。如果有人能帮上忙,那将是一个很大的帮助!谢谢!

如果项目呈现器在某一行上,则会调用以下方法之一。

代码语言:javascript
复制
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的地方:

代码语言:javascript
复制
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);
     }
  }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-10 07:46:29

这就是答案,如果有人看到这个的话..我仍然不确定问题出在哪里,但AdvancedDataGrid肯定不喜欢我在渲染器中添加一个子级标签。我是这样绕过它的..将TextField作为子对象添加到精灵中,如下所示:

代码语言:javascript
复制
        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);

希望这对某些人有帮助!

票数 0
EN

Stack Overflow用户

发布于 2010-07-10 01:54:45

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

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

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

代码语言:javascript
复制
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 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3215159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档