2010-02-07 3 views
3

저는 플렉스 4에서 스킨을 좋아합니다 - 그들은 로직과 스타일링 사이의 멋진 분리를 제공합니다.플렉스 4 스킨 및 바인딩

사람들이 피부에서 어떻게 바인딩을 사용하는지 궁금합니다.

label="{ hostComponent.model.buttonLabel }" 

당신은 또한이 방법으로 바인딩 사용할 수 있습니다 :

selectedItem="@{ hostComponent.model.selectedItem }" 

을하지만, 당신이 정말 구성 요소에서 처리해야하므로이 논리라고 주장 할 수있는 가장 쉬운 방법은 피부에 결합하는 것입니다 . 새 스킨을 만들 때마다 모든 바인딩을 다시 만들고 싶지는 않습니다. 그것은 허약하고 버그를 만드는 경향이 있습니다.

그래서 대체 무엇입니까? 내가 생각하기에 이벤트 리스너의 버킷로드 만들기. 어도비 관찰 및 관찰 태그는 유용 할 수 있습니다.

다른 사람들이 어떻게 처리합니까?

+0

왜 양방향 바인딩이 필요합니까? 스킨에서 구성 요소 속성을 업데이트 할 때 아무런 의미가 없습니다. – Yaba

+0

글쎄, 예를 들어 텍스트 입력 상자가 있고 텍스트가 업데이트 될 때 모델이나 구성 요소에 알리고 싶다면. – Roaders

답변

1

나는 그것이 좋고 흥미로운 질문이라고 생각한다. 두 가지 대안이 있습니다. 모델을 스킨에 삽입하고 직접 바인딩 할 수 있다고 생각합니다. 그러나 스킨이 구성 요소와 밀접하게 연결되어야한다고 생각하기 때문에 잘못된 것 같습니다. 구성 요소가 모델에 대한 참조를 변경하면 스킨이 자동으로 변경됩니다. 그리고 어쨌든 당신이 언급 한 문제를 과장하기 만합니다.

스킨에 ID를 만들고 모델에서 해당 ID를 조작 할 수 있습니다. 예 :

SKIN: label id="infoLabel" 
COMPONENT: [SkinPart] var infoLabel:Label 
creationComplete { 
    BindingUtils.bindProperty(this, 'infoLabel', model, 'infoLabel'); 
} 

이렇게하면 문제가 해결됩니다. 동일한 구성 요소의 스킨간에 반복적 인 유지 관리가 필요 없습니다. 그러나 BindingUtils를 사용하면 비용이 발생합니다. 첫째로 무엇이 무엇에 묶여 있는지 분명하지 않습니다. {} 방식을 사용하는 것이 훨씬 더 명백합니다. 두 번째로 (실제로 이것이 첫 번째 요점의 일부일뿐입니다) 코드를 읽고 진행 상황을 파악해야하는 능력이 약한 개발자를 혼란스럽게 할 수 있습니다.

편집 : 귀하의 구성 요소가 AS3에 있다고 가정합니다. 구성 요소가 MXML에 있으면 MXML에서 일반적으로하는 것처럼 바인딩 할 수 있습니다.

+0

게시물 주셔서 감사합니다. 개인적으로 BindingUtils가 싫어서 사용하지 마십시오. 기본적으로 코드에 매직 문자열로드를 추가하는 것입니다 (속성 이름). 우리 팀의 개발자가 오후에이 문제로 인한 문제를 디버깅하게했습니다. 오류가 바인딩 코드에 의해 삼켜지고 있으므로 추적하기가 매우 어려웠습니다. – Roaders

+0

OK하지만 AS3 대신 MXML에서 구성 요소를 작성하면 바인딩 태그를 사용하여 동일한 작업을 수행 할 수 있다고 생각합니다. – Fletch