我的flex mxml组件中有两个标签。
第一个显示视频播放的播放时间,另一个也用于相同目的。不同之处在于,当我们处于添加模式(由标志变量决定)时,两者都应该使用绑定显示当前的播放时间。 />
但是当我们处于编辑模式(再次由flag决定)时,后一个标签应保持静态,更具体地说,该值将从数据库中重新获得。
我怎么能用actionscript来做到这一点。我尝试过ChangeWathcer,但我发现它有点棘手。有没有其他更简单的方法或我错过了什么。
以下是我的代码。
私有函数init():void
{
if(queFlag =='a')
{
// timeLbl.text = currentTimeLbl.text使用一些绑定机制
}
否则如果(queFlag =='e')
{
// timeLbl.text ='从数据库中恢复的值';
}
}
此处currentTimeLbl显示videoDisplay播放时间,因此它会随着视频的播放而动态变化。
请帮帮我。
答案 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' }"/>
flagBox
将导致标签#2显示“默认”,否则将显示txtBox
中的文字。flagBox2
中选择“a”将导致标签#3显示“默认”,否则会显示txtBox
中的文字。我经常使用它来减少我的UI逻辑中的代码行,对我来说效果很好。这种技术的一个问题是你不能在卷括号绑定中使用所有逻辑符号,例如<
或&&
,但我通常可以使用它。