Flex3.5のItemRendererで問題が発生しました。このエラーに関する他の投稿を見ましたが、それでも理解できません。ItemRendererは、データプロバイダーがHierarchicalDataであるAdvancedDataGridの一部です。ArgumentErrorが発生しますが、トレースが私のコードのいずれにも行きません。私は何度もデバッグモードを経験しましたが、コードが実行されるまでそれは起こらないようです。かなり奇妙。
アイテムレンダラーには、いくつかの異なる部分があります。xmlデータに基づいて、どの行を描画する必要があるかを判断し、ラベルとスプライトを適切に追加します。誰かが助けることができれば、それは大きな助けになるでしょう!ありがとう!
これは、itemrendererが特定の行にある場合に呼び出されるメソッドの1つです。
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);
}
}