Flex 3: как определить, является ли универсальный объект действительно кнопкой? - PullRequest
0 голосов
/ 08 августа 2009

У меня есть этот бит кода, и он не работает, как я ожидал. btnContainer - это VBox, содержащий множество кнопок (toggle = true); и я хочу, чтобы в определенный момент их было отключено.

for (var btn:Object in btnContainer.getChildren()){
    if (btn.isPrototypeOf(mx.controls.Button)){
        btn.selected = false;
    }
}

В приведенном выше коде «btn» отображается как просто индекс во время каждой итерации цикла (0,1,2,3, ...), а условное выражение никогда не оценивается как true.

Я тоже пробовал это:

for (var btn:Button in btnContainer.getChildren()){
    btn.selected = false;
}

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

Что я делаю не так, здесь?

Ответы [ 2 ]

4 голосов
/ 08 августа 2009

Если вы хотите перебрать элементы массива, используйте цикл "for each..in", и если вы хотите увидеть, совместима ли переменная с данным типом (например, экземпляром данного класса), используйте оператор is.

Ссылка на язык имеет пример для этого точного вида случая.

Вот фиксированный код:

for each (var btn:Object in btnContainer.getChildren()){
    if (btn is Button){
        btn.selected = false;
    }
}   
2 голосов
/ 08 августа 2009

Вы пробовали использовать is?

import mx.controls.Button;

//...
for (var key in btnContainer.getChildren()){
    var obj : Object = btnContainer[key];
    if (obj is Button){
        var button : Button = obj as Button;
        button.selected = false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...