Почему я получаю ошибку «Duplicate переменная определения» здесь? - PullRequest
0 голосов
/ 04 февраля 2010

Мне кажется, что Flash сообщает мне, что мой массив tabData дублируется, но я установил его только один раз в разделе var моего кода:

Это строка с ошибкой:

for (var i in tabData) {

Класс TabMenu

private var tabData:Array = []; // <- tabData created here

public function drawTabMenu(w, h, color, videoHDiff, ypos):void
    {           
        trace("drawTabMenu --------------");

        for (var i in Global.xml..tab) {
            tabData.push( {id:Global.xml..tab[i].@id, video:Global.xml..tab[i].vid} );
        }

        // DRAW GRAPHICS CODE HERE...

        //draw the tabs
        for (var i in tabData) { // < line throwing error

            var tab:MovieClip = new TabDefault();
            var active:MovieClip = new TabActive();
            tabArray.push(tab);
            tab.video = tabData[i].video;
            tab.addChild(active);
            i < 1 ? active.visible = true : active.visible = false;
            tab.y = topShadow.y + 5;

            // add in the textfield here
            // addChild(tf);

            // resize the tab background to textfield
            tab.x = i < 1 ? 10 : tabArray[(i-1)].x + (tabArray[(i-1)].width+3);
            tab.active = i < 1 ? tab.active = true : tab.active = false;
            topShadow.addChild(tab);

            tab.mouseChildren = false;
            tab.buttonMode = true;
            tab.addEventListener(MouseEvent.CLICK, tabClick);
        }

        // set default thumbnails here
        trace("FIRST TAB DATA: "+tabData[0].video);
    }

Ответы [ 2 ]

3 голосов
/ 04 февраля 2010

i является дубликатом переменной, а не tabData. Actionscript допускает только область действия функции, а не область блока, как во многих (большинстве) других языках.

Повышение видимости переменных области действия уровня блока в область действия функции называется hoisting.

Ресурсы:

3 голосов
/ 04 февраля 2010

Я не знаю, флэш, но тот факт, что вы используете i в качестве переменной цикла в оба цикла, проблема? Я думаю, что это не должно быть - конечно, не было бы на Яве - но, возможно, это все.

Также, не связанная с вашей проблемой, эта строка:

tab.active = i < 1 ? tab.active = true : tab.active = false;

было бы легче читать так:

tab.active = i < 1;

Опять же, при условии, что flash работает как языки, которые я знаю лучше.

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