2010-07-09 94 views
0

我在Flex 3.5的ItemRenderer中遇到問題。我已經看過關於這個錯誤的其他帖子,但仍然無法弄清楚。 ItemRenderer是數據提供者爲HierarchicalData的AdvancedDataGrid的一部分。我得到了ArgumentError,但跟蹤並沒有進入我的任何代碼。我已經在調試模式中經歷了很多次,但是看起來直到我的代碼運行之後它才發生。很奇怪。Flex ArgumentError:ItemRenderer中的錯誤#2025

項目渲染器有幾個不同的部分。它根據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); 
    } 
    } 

回答

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); 

希望這可以幫助別人!

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 
} 
+0

我認爲你實際上是對的。我發佈了下面的堆棧跟蹤,它肯定引用了AdvancedDataGrid。 – Craig 2010-07-09 18:04:51

+0

仍然有點困惑...所以你認爲這個錯誤可能會發生,因爲數據網格認爲標籤和精靈應該是它的孩子,而不是項目渲染器? – Craig 2010-07-09 18:10:08

+0

是的,類似的東西。我不知道你是怎麼調用addLabels(),但似乎你的上下文變得困惑。 – Robusto 2010-07-09 18:28:01

相關問題