动态生成ComboBox名称

时间:2009-12-07 20:21:04

标签: flex actionscript-3

我有一个解析一些复杂XML的脚本。当XML元素属于某种类型时,它会使用XML元素的子元素生成一个comboBox来填充该框。然后,我想要检查所有生成的ComboBox的所有值以及它们的正确答案(这也是存储在XML文件中的信息)。在创建ComboBoxes时,我添加了一个“id”属性。但是,似乎我不能使用它们:

dynamicQuestion.id.selectedItem.labelField

检查答案。但是,如果我知道用于创建ComboBox的变量名称,我就可以获得labelField。

dynamicQuestion.selectedItem.labelField

这表明(对我而言)我需要动态生成变量名,因为我正在创建ComboBox的新实例。但是,如何动态生成变量名称?如果我使用

var thisBox:String = "box"+boxCount;
var newBox:ComboBox = thisBox as ComboBox;

我得到了一个隐含的强制错误。我也尝试将创建语句更改为接受参数“thisBox”的函数,但这也不起作用。从概念上讲,这似乎很简单,但我很难将它付诸实践。似乎comboBox的id是通过使用脚本创建框来生成的(例如,var thisBox)。如何动态生成此名称?

2 个答案:

答案 0 :(得分:1)

使用Stefan建议的数组。如果必须使用字符串标识符,则可以创建一个对象并将其用作关联数组。

var combos:Object = {};

var boxCount:Number = 1;
var thisBox:String = "box"+boxCount;
//you can store comboboxes in the object using the following syntax
combos[thisBox] = new ComboBox();
//or
combos.box2 = new ComboBox();
//or
combos["box3"] = new ComboBox();

trace(combos.box1.selectedItem.labelField);
trace(combos.box2.selectedItem.labelField);
trace(combos.box3.selectedItem.labelField);

答案 1 :(得分:0)

为什么不将所有动态创建的组合框存储在数组中?当您想要评估它们时,您将遍历数组并访问selectedItem.labelField。