Flex-3 условия для 3-х возможных значений для переменной - PullRequest
0 голосов
/ 20 июля 2011

У меня есть три условия для трех возможных значений для переменной. В коде mxml я хотел бы отобразить разные сетки данных для каждого экземпляра. Есть ли более короткий путь, чем написание трех логических функций для каждого возможного значения, а затем использование логического значения, возвращаемого методом, в качестве параметра для загрузки каждой сетки данных?

1 Ответ

0 голосов
/ 20 июля 2011

вы можете напрямую связать свойства visible и includeInLayout в определении сетки MXML либо с логическим значением, либо с выражением, которое оценивается как логическое значение.Единственным ограничением является то, что вы должны быть в состоянии выразить оценку как одно утверждение.Однако вы можете использовать составные условия, которые вы просто не можете сделать, например, сохранить переменную, а затем проверить ее.Вы можете выполнить это просто так:

<mx:DataGrid visible="{myObject=='state1'}" includeInLayout="{myObject=='state1'}"/>
<mx:DataGrid visible="{myObject=='state2'}" includeInLayout="{myObject=='state2'}"/>
<mx:DataGrid visible="{myObject=='state3'}" includeInLayout="{myObject=='state3'}"/>

Обратите внимание, что это все равно приведет к созданию всех трех сеток в результате создания их родительского контейнера.В качестве альтернативы вы можете использовать состояния для добавления или удаления определенных сеток ... в конечном счете, лучший вариант - создать одно определение сетки и изменить его свойства условно в зависимости от состояния.Есть много способов решить эту проблему, но некоторые лучше, чем другие, поэтому рассмотрите возможность просмотра Flex во время недельного видео и жизненного цикла UIComponent, чтобы убедиться, что вы понимаете последствия своего выбора.

Также обратите внимание, если вам нуженсложное условие, поскольку вы находитесь в XML, вам нужно будет использовать

&

для каждого амперсанда, например

<mx:DataGrid visible="{myObject=='state3'&amp;&amp;someOtherThing=='whatever'}" includeInLayout="{myObject=='state3'&amp;&amp;someOtherThing=='whatever'}"/>

Последнее редактирование, которое я рекомендуюиспользуя это: http://livedocs.adobe.com/flex/3/html/help.html?content=using_states_3.html

...