Использование строк для динамического доступа к пользовательским методам - PullRequest
0 голосов
/ 23 февраля 2009

Я создаю двумерный список с последовательными номерами в конце «дня» для использования в качестве dataProvider для DataGrid я обращался к ним через команду
dg1.selectedItem.day1
dg1.selectedItem.day2
dg1.selectedItem.day3
и т.д ...

есть ли способ взять строку ("день" + 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 ]

1 голос
/ 23 февраля 2009

"Таинственная функция", которую вы ищете, проста, как индексирование в скобках:

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

И это на удивление называется атрибутом.

0 голосов
/ 23 февраля 2009

Используйте Array или, если вы собираетесь связать его (на что я ставлю), используйте ArrayCollection вместо именования этих переменных по отдельности.

Если члены генерируются какой-то программой, вам лучше поместить все это в один из классов коллекций, которые я упомянул выше, а затем начать обработку. Это облегчает жизнь в долгосрочной перспективе.

E4X - это способ работать с XML. Ребята из Mozilla имеют возможно лучшее объяснение этой технологии. Итак, если ваш XML хранится в переменной как:

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

Вы можете просто сделать:

tree.day1 = 42;

Зачем вам это mysteryFunction()? Объект dataProvider - это просто коллекция некоторого типа. Вы знаете тип уже, верно? Прочитайте это .

Во всяком случае, такой загадочной функции не существует. Обратите внимание, однако, что конкатенация строк с числом преобразует число в строку. Попробуйте

trace("str " + 42);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...