Flex условное связывание данных - PullRequest
2 голосов
/ 08 октября 2009

В моем компоненте flex mxml есть две метки.

первый показывает время воспроизведения видео-дисплея, а другой также используется для той же цели.
Разница в том, что когда мы находимся в режиме добавления (определяется из переменной flag),
оба должны показывать текущее время воспроизведения с использованием привязки.

но когда мы находимся в режиме редактирования (опять-таки из флага), последняя метка должна оставаться статической, а точнее - значение, полученное из базы данных.

как я могу сделать это с помощью actionscript. Я попробовал ChangeWathcer, но нашел его немного сложным. Есть ли какой-нибудь другой более простой способ или я что-то упустил?

следующий мой код.

приватная функция init (): void
{
if (queFlag == 'a')
{
// timeLbl.text = currentTimeLbl.text с использованием некоторого механизма привязки
}
иначе if (queFlag == 'e')
{
// timeLbl.text = 'значение получено из базы данных';
}

}

здесь currentTimeLbl показывает время воспроизведения видео, поэтому оно динамически изменяется при воспроизведении видео.

пожалуйста, помогите мне.

Ответы [ 2 ]

1 голос
/ 08 октября 2009

Вы можете сделать это примерно так:

<Label id="timeLbl" text="{timeLabelText}"/>

<Label id="currentTimeLbl" change="dispatchEvent('currentTimeLblChanged')"/>

[Bindable(event = "queFlagChanged")] 
[Bindable(event = "currentTimeLblChanged")]
private function get timeLabelText():String   
{
    if(_queFlag == 'a')
    {
        return currentTimeLbl.text;
    }
    else
    {
        return 'value retrived from database';
    }        
}

public function set queFlag(value:String):void
{
    _queFlag = value;

    dispatchEvent(new Event("queFlagChanged"));
}
0 голосов
/ 30 ноября 2009

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

Вот рабочий пример:

<mx:CheckBox id="flagBox"/>
<mx:ComboBox dataProvider="{['a','e']}" id="flagBox2"/>
<mx:TextInput id="txtBox"/>
<mx:Label text="default: {txtBox.text}"/>
<mx:Label text="conditional (bool): { (flagBox.selected)? txtBox.text: 'default' }"/>
<mx:Label text="conditional (value): { (flagBox2.selectedItem == 'a')? txtBox.text: 'default' }"/>
  1. Проверка flagBox приведет к тому, что на ярлыке # 2 будет отображаться «по умолчанию», в противном случае отображается текст из txtBox.
  2. Выбор «a» в flagBox2 приведет к тому, что на ярлыке # 3 будет отображаться «default», в противном случае отображается текст из txtBox.

Я регулярно использую это для уменьшения количества строк кода в моей UI-логике, и это работает довольно хорошо для меня. Проблема этого метода в том, что вы не можете использовать все логические символы в привязках фигурных скобок, такие как < или &&, но я обычно мог бы жить с этим.

...