2009-10-08 3 views
2

flex mxml 구성 요소에 두 개의 레이블이 있습니다.

처음에는 비디오 디스플레이의 재생 헤드 타임을 보여주고 다른 하나는 같은 목적으로 사용됩니다.
차이점은 추가 모드 (플래그 변수로 결정)에있는 경우
은 바인딩을 사용하여 현재 재생 헤드 시간을 모두 표시해야합니다.

그러나 우리가 편집 모드에있을 때 (다시 플래그로 결정한 경우) 후자의 레이블은 데이터베이스에서 검색 한 값인 더 구체적으로 정적으로 유지되어야합니다.Flex 조건부 데이터 바인딩

어떻게해야합니까? 나는 ChangeWathcer를 시도했지만 조금 까다 롭다. 다른 간단한 방법이 있거나 뭔가 빠뜨린 것입니다.

다음은 내 코드입니다.

전용 기능 초기화() {공극

경우 (queFlag == 'A')

{// timeLbl.text = currentTimeLbl.text 일부 결합기구
}
다른 경우를 사용 (queFlag == 'e')
{
// timeLbl.text = '데이터베이스에서 값을 검색했습니다'; 이 비디오가 재생되면서 동적으로 변경 있도록
}

}

여기 currentTimeLbl는 비디오 리플렉션의 playheadTime을 보여줍니다.

나를 도와주세요.

답변

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

플렉스에서 바인딩 조건의 매우 짧은 방법입니다. 조건을 MXML 중괄호 묶음에 코드하면 MXML 컴파일러에서이 표현식에 참여하는 모든 객체의 리스너로 변환됩니다. 여기

은 작업 예입니다

"기본"그렇지 않으면 txtBox에서 텍스트가 표시됩니다 표시 라벨 # 2가 발생합니다 flagBox 확인
<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. .
  2. flagBox2에서 "a"를 선택하면 레이블 # 3에 "default"가 표시되고 그렇지 않으면 txtBox의 텍스트가 표시됩니다.

정기적으로 내 UI 로직에서 코드 줄을 줄이기 위해이 코드를 사용합니다. 이 기술의 문제점은 < 또는 &&과 같이 중괄호 묶음에있는 모든 논리 기호를 사용할 수는 없지만 일반적으로 그 논리를 사용할 수 있다는 것입니다.

관련 문제