Flex条件数据绑定

时间:2009-10-08 11:47:15

标签: flex data-binding

我的flex mxml组件中有两个标签。

第一个显示视频播放的播放时间,另一个也用于相同目的。不同之处在于,当我们处于添加模式(由标志变量决定)时,两者都应该使用绑定显示当前的播放时间。 />
但是当我们处于编辑模式(再次由flag决定)时,后一个标签应保持静态,更具体地说,该值将从数据库中重新获得。

我怎么能用actionscript来做到这一点。我尝试过ChangeWathcer,但我发现它有点棘手。有没有其他更简单的方法或我错过了什么。

以下是我的代码。

私有函数init():void  
{
    if(queFlag =='a')
    {
     // timeLbl.text = currentTimeLbl.text使用一些绑定机制
    }
    否则如果(queFlag =='e')
    {
    // timeLbl.text ='从数据库中恢复的值';
    }

}

此处currentTimeLbl显示videoDisplay播放时间,因此它会随着视频的播放而动态变化。

请帮帮我。

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容执行此操作:

<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"));
}

答案 1 :(得分:0)

这是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. flagBox2中选择“a”将导致标签#3显示“默认”,否则会显示txtBox中的文字。
  3. 我经常使用它来减少我的UI逻辑中的代码行,对我来说效果很好。这种技术的一个问题是你不能在卷括号绑定中使用所有逻辑符号,例如<&&,但我通常可以使用它。