Flex ArgumentError: Ошибка № 2025 в ItemRenderer - PullRequest
0 голосов
/ 09 июля 2010

У меня проблема с ItemRenderer в Flex 3.5.Я посмотрел на другие сообщения об этой ошибке, но до сих пор не могу понять это.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 голосов
/ 10 июля 2010

Вот ответ, если кто-то смотрел на это ... Я все еще не совсем уверен, в чем проблема, но AdvancedDataGrid, конечно, не понравилось, что я добавил метку в качестве дочернего элемента к средству визуализации.Вот как я справился с этим ... добавьте 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);

Надеюсь, это кому-нибудь поможет!

0 голосов
/ 09 июля 2010

Я видел подобные вещи раньше. Эта ошибка может происходить в самой 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 
}
...