Flex Как изменить состояние кнопки в ActionScript? - PullRequest
0 голосов
/ 16 февраля 2012

я могу сделать это:

<s:Button id="Btn" enabled.State1="false" />

Но следующий код дает мне ошибку.

 private function enableDisable():void{
       Btn.enabled.State1="false";  //Error: Access of undefined property State1
      }

как кодировать enabled.State1 в ActionScript?

Спасибо

Ответы [ 2 ]

3 голосов
/ 16 февраля 2012

Я знаю, что это не то, что вы хотите услышать, но здесь все равно идет речь: почему вы хотите это сделать?Вся цель состояний в том, что вам не нужно было бы писать тонны ActionScript, чтобы сделать то же самое.

Почему вы не можете сделать это так

Написав Btn.enabled.State1 в ActionScript, вы, по сути, говорите: дайте мне свойство с именем 'State1' изЛогический экземпляр с именем 'enabled'.Очевидно, что это не сработает, потому что логическое значение не имеет такого свойства.Вы путаете нотацию MXML с точкой (.), Используемую для назначения значений свойствам на основе состояний, с нотацией ActionScript, используемой для чтения / записи свойств.

Решение илинастолько близко, насколько это возможно,

Поскольку сама природа этой функции заключается в том, что вы будете использовать ее в MXML, вы не можете делать в точности то, что запрашиваете в ActionScript.Следующим лучшим вариантом будет прослушивание StateChangeEvent en для установки свойства Button 'enabled' согласно новому имени состояния.

addEventListener(StateChangeEvent.CURRENT_STATE_CHANGE, onStateChange);

private function onStateChange(event:StateChangeEvent):void {
    switch (event.newState) {
        case "wrong":   Btn.enabled = false; break;
        case "correct": Btn.enabled = true; break;
    }
}

(я использую те же состояния, что и вДжеймс ответ)

0 голосов
/ 16 февраля 2012

Я думаю, что вы можете использовать состояния в неправильном контексте.Например, у вас есть компонент, который содержит пользовательский ввод с кнопкой рядом с ним.Кнопка активна только тогда, когда введено правильное слово.Вы должны определить два состояния для компонента, возможно, correct и wrong.

<s:states>
    <s:State name="wrong" />
    <s:State name="correct" />
<s:states>

Затем вы, подобно тому, что вы сделали выше, задали бы индивидуальные свойства кнопок в зависимости от состояния:

<s:Button id="Btn" enabled.wrong="false" enabled.correct="true" />

По умолчанию состояние компонентабудет wrong.После обработки пользовательского ввода и проверки правильности введенного слова состояние компонента будет изменено на correct.

Обычно специфичные для состояния свойства компонентов устанавливаются во время компиляции и состояниеСам компонент изменился во время выполнения.

Вот обзор состояний в Flex 4.6

...