Как сделать if-else для компонента Flex, основываясь на значении члена объекта? - PullRequest
0 голосов
/ 19 июля 2011

Когда я щелкаю строку в сетке данных, загружается состояние «PeopleDetails». На состоянии детали, у меня есть флажок. Этот флажок был автоматически создан при создании формы. Это потому, что поле в таблице People является логическим.

Я на самом деле не хочу иметь флажок, но я хочу, чтобы значение Да / Нет печаталось рядом с этикеткой.

Итак, я пишу код AS, встроенный в код MXML:

<s:Form includeIn="PeopleDetails">
 <s:FormItem label="Is Present?">
  <fx:Script>
  <![CDATA[
  if(person!= null ){
   if(person.present==true){
    Alert.show("Test - Yes");
   }
  }
  else{
   Alert.show("No");
  }
  ]]>
  </fx:Script>
  <s:CheckBox id="personCheckBox2" enabled="false" selected="{person.present}"/>
 </s:FormItem>
</s:Form>

Просто для тестирования у меня есть всплывающие окна с оповещениями. В конце концов, я бы переключился на печать, чтобы отобразить значения Да / Нет.

Проблема: -Я не знаю, как проверить, является ли атрибут присутствует в объекте person истинным или ложным. Выше я получаю жалобу FB 1120: доступ к неопределенному имуществу person.

Если я удалю код AS, флажок будет работать нормально. Флажок использует person.present, чтобы знать, стоит ли его проверять или нет. Почему я не могу использовать person.present для теста if-else?

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

Ответы [ 3 ]

1 голос
/ 19 июля 2011

Я надеюсь, что приведенный выше код является частью ItemRenderer.

Просто переместите вышеуказанный код блока Script, чтобы установить функцию data (), как показано ниже:

    override public function set data( value: Object ): void
    {
        super.data = value;

        if(person != null ){
            if(person.present==true){
                Alert.show("Test - Yes");
            }
        }
        else{
            Alert.show("No");
        }
    }

Кроме того, я не думаю, что Alert будет работать в Itemrenderer, поэтому замените его оператором trace (""). Надеюсь, это помогло.

1 голос
/ 19 июля 2011

Если я правильно вас понял, вам нужно значение Да / Нет, а не флажок, это должно сделать это для вас:

Изменение:

<s:CheckBox id="personCheckBox2" enabled="false" selected="{person.present}"/>

Кому:

<s:Label text="{(person.present)?'Yes':'No'}"/>

Итак, новая форма выглядит так:

    <s:Form includeIn="PeopleDetails">
        <s:FormItem label="Is Present?">
            <s:Label text="{(person.present)?'Yes':'No'}"/>
        </s:FormItem>
    </s:Form>
1 голос
/ 19 июля 2011

Нельзя поместить код ActionScript в сценарий в виде тега Script. Вы можете размещать свойства и методы только следующим образом. Поэтому поместите свой код в метод и вызывайте этот метод как реакцию на какое-либо событие (например, creationComplete).

...