Flex 3: использование значения элемента массива в качестве имени объекта - PullRequest
0 голосов
/ 20 августа 2011

Если у меня есть список элементов в массиве, которые представляют имена модулей:

var phaseNames:Array = new Array("directorsPrep", "checkIO", "pickupPhoto", "pickupPhoto", "syncing", "dailies", "pictureEdit", "soundEdit", "soundMix", "colorCorrection", "finishing");

и я хочу пройтись по каждому из них и вызвать функцию в каждом экземпляре каждого модуля, как бы я поступил так? Пока у меня есть следующее:

private function changeStartViewDate(numDays:Number):void
{
    startViewDate = rightDate(startViewDate.getMonth(), startViewDate.getDate() + numDays, startViewDate.getFullYear());
    getDateInfo();
    determineCalendarWeek();
    var phaseNames:Array = new Array("directorsPrep", "checkIO", "pickupPhoto", "pickupPhoto", "syncing", "dailies", "pictureEdit", "soundEdit", "soundMix", "colorCorrection", "finishing");

    for (var i:int = 0; i < wholeProject.length; i++)
    {
        wholeProject[i].moveProject(Number((1-2) * numDays));
    }
    for (i = 0; i < phaseNames.length; i++)
    {
        for (var j:int = 0; j < [phaseNames[i]].length; j++)
        {
            [phaseNames[i]].movePhase(Number((-1) * numDays));
        }
    }
}

Но когда я пытаюсь сохранить его, я получаю следующую ошибку:

1084: синтаксическая ошибка: ожидается идентификатор перед точкой.

Это говорит мне об ошибке в следующей строке:

[phaseNames[i]].movePhase(Number((-1) * numDays));

Я пытался сделать что-то вроде следующего, но это не сработало:

[phaseNames[i].movePhase(Number((-1) * numDays))];

Приведенная выше попытка выяснить это дала мне следующую ошибку

1064: недействительные метаданные.

Буду признателен за любую помощь.

1 Ответ

1 голос
/ 20 августа 2011

Я собираюсь предположить, что:

  1. Каждое значение вашего массива phaseNames ссылается на фактический экземпляр какого-либо другого класса [, а не на имя класса]
  2. Экземпляр, определенный в массиве phaseNames, является дочерним элементом текущего класса.

Вы должны быть в состоянии сделать что-то вроде этого:

var childName = phaseNames[0];
var myChild : myObjectType = this[childName];
// then call function
myChild.doStuff();

Этот подход не отличается от того, что у вас есть; Я просто делаю это в нескольких строках. Я также добавляю ключевое слово this для доступа к ребенку.

Могу поспорить, если вы попробуете это напрямую, это сработает:

this[phaseNames[i]].movePhase(Number((-1) * numDays));

Я должен задаться вопросом, почему вы не создали массив всех экземпляров вместо массива имен всех переменных, которые указывают на экземпляры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...