使用字符串动态访问自定义方法

时间:2009-02-23 18:24:27

标签: flex string flex3 variables

我正在创建一个二维列表,在“day”结尾处有连续的数字,用作DataGrid的dataProvider 我一直通过命令访问它们 dg1.selectedItem.day1
dg1.selectedItem.day2
dg1.selectedItem.day3
等...

有没有办法取字符串(“day”+ i)并将其转换为(它是什么?变量名?) 所以我可以做一些事情:

for(var i:Number=1; i<numFields; i++)
{
  dg1.selectedIndex = i-1;
  dg1.selectedItem.(mysteryFunction("day"+i)) = 42;
}

如果有一个我可以用于mysteryFunction的函数,或者使用什么数据类型,任何信息都会非常有用


这就是我一直在使用的(如此繁琐):

<mx:XMLList id="sched">
  <field>
      <day1></day1>
      <day2></day2>
      <day3></day3>
  </field>
  <field>
      <day1></day1>
      <day2></day2>
      <day3></day3>
  </field>

  ...
</mx:XMLList>

2 个答案:

答案 0 :(得分:1)

您正在寻找的“神秘功能”就像使用括号进行索引一样简单:

for(var i:Number=1; i<numFields; i++)
{
    dg1.selectedIndex = i-1;
    dg1.selectedItem["day"+i] = 42;
}

令人惊讶的是,它被称为属性。

答案 1 :(得分:0)

使用Array或者如果你要绑定它(我有点打赌)使用ArrayCollection而不是单独命名这些变量。

如果成员是由某个程序生成的,那么最好将所有这些成员放在我上面提到的一个集合类中,然后开始处理。从长远来看,它使生活更轻松。

E4X是处理XML时的方法。 Mozilla的家伙可以说有更好的explanation技术。因此,如果您的XML存储在变量中:

var tree:XML = <field>
    <day1></day1>
    <day2></day2>
    <day3></day3>

                                

您可以这样做:

tree.day1 = 42;

为什么要这个mysteryFunction()dataProvider对象只是某个Type的集合。您已经知道类型,对吗?阅读this

无论如何,没有这样的神秘功能。但请注意,使用数字进行字符串连接会将数字转换为字符串。尝试

trace("str " + 42);