Imp*_*tor 1 apache-flex actionscript-3
这感觉就像一个新手问题,所以支撑自己.
我很难在编译时使用'id'属性获取对添加的元素的引用.我已经看到一些论坛主题暗示这是不可能的,并且获得对这种方式添加的元素的引用是棘手的,但从来不仅仅是那个技巧.这段代码引发了一个有趣的小事:Error: uncaught exception: Error calling method on NPObject! [plugin exception: "ReferenceError: Error #1069: Property canvas_tentpoles_0 not found on SGraph and there is no default value."]
.
public function calledAfterInit(graph_values:Array):void
{
for(var i:int=0; i<graph_values.length; i++) {
var cdc:CartesianDataCanvas = new CartesianDataCanvas();
cdc.id = "canvas_tentpoles_"+i;
cdc.includeInRanges = false;
cdc.visible = false;
Areachart.annotationElements = Areachart.annotationElements.concat(cdc);
// [...do stuff...]
}
// [...later...]
for(var j:int=0; j<graph_values.length; j++) {
drawOnCanvas(j);
}
}
private function drawOnCanvas(index:int):void {
var canvas:CartesianDataCanvas = this["canvas_tentpoles_"+index]; // ? Error likely from here
canvas.lineStyle(1);
canvas.moveTo(10,10);
canvas.lineTo(10,20);
// [...etc...]
}
Run Code Online (Sandbox Code Playgroud)
我不想预先添加任何<mx:CartesianDataCanvas>
我需要的标签,而且我只需要多少graph_values.length
.有人可以告诉我哪里出错了吗?
this["objects_id"]
this.objects_id
只有当"objects_id"是对应的类的实例变量时,语法才有效this
.当你声明<CartesianDataCanvas id="myCdc"/>
在MXML文件(说CustomCanvas.mxml有<mx:Canvas>
,因为它的根标签),Flex编译器的名称生成一个类CustomCanvas
扩展mx.Canvas,并增加了一个公共变量myCdc
类型的CartesianDataCanvas
吧.这就是您能够访问它的原因this.myCdc
.但是,当您id
为运行时创建的对象的属性赋值时,不会向该类添加任何变量,因此您无法使用this.id语法访问它.
一个简单的解决方法是声明一个数组,将对象存储在该数组中,然后根据需要检索元素.
private var tentPoles:Array = [];
public function calledAfterInit(graph_values:Array):void {
for(var i:int=0; i<graph_values.length; i++) {
var cdc:CartesianDataCanvas = new CartesianDataCanvas();
tentPoles.push(cdc);
// ...do stuff...
}
// [...later...]
for(var j:int=0; j<graph_values.length; j++) {
drawOnCanvas(j);
}
}
private function drawOnCanvas(index:int):void {
//read from the array and cast it appropriately
var canvas:CartesianDataCanvas = CartesianDataCanvas(tentPoles[j]);
canvas.graphics.lineStyle(1);
canvas.graphics.moveTo(10,10);
canvas.graphics.lineTo(10,20);
// [...etc...]
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1042 次 |
最近记录: |