2011-04-11 3 views
1

다른 개발자가 작성한 일부 Flex 코드를 리팩토링하고 있으며 PresentationModel 방식을 구현하고 있습니다. ActionScript를 MXML에서 분리하고 싶습니다. 내가 발견 한 문제 중 하나는 원래 ActionScript 코드가 MXML에서 요소를 추가/제거한다는 점입니다.프레젠테이션 모델을 사용하여 Flex에 요소 추가

처리기 기능이 모델을 검사하고 값이 올바른지 확인하면 뷰에서 요소를 만들거나 제거 할 수 있습니다. 프리젠 테이션 모델을 뷰에 대한 광고 요소로 가져오고 내가 목표로 삼고있는 느슨한 커플 링을 유지하는 가장 좋은 방법은 무엇입니까?

프리젠 테이션 모델이 전달하는 간단한 이벤트를 사용하고 추가 할 요소의 세부 사항을 전달하기 위해 뷰를 나열 할 수 있다고 생각했습니다. 다른 해결책이 있습니까?

감사

스티븐

답변

1

프레젠테이션 모델을 사용하는 경우, 당신은 일어날 필요가 무엇인지 어떤 종류의 데이터가 있다고 가정 것입니다. 어떤 종류의 항목도 동적으로 추가/제거 될 때 데이터 조작을 통해 조작이 쉬워졌습니다. 다른 항목을 추가하려면 원하는 dataProvider (List, ComboBox, DataGroup 등)에 다른 데이터 모델을 추가하십시오.

이 방법을 사용하면 논리를 표현 자에서보기로 추상화 할 수 있습니다. 이벤트는 발표자가 어떤 것을 성취했는지를보기 위해서만 사용해야합니다. 이러한 방식으로 데이터를 수신 할 수 있습니다 (그렇게하는 것이 좋습니다). 또는 발표자의 데이터를 dataProvider에 바인딩 할 수 있습니다. 둘다 좋다. 나는 더 깔끔하고 간단하게 구속력을 찾는다.

+0

원래의 코드를 참조하십시오 내가 여기에 기존 코드를 리팩토링있어 기억 drawBorder라는 또 다른() 함수를 다음 값을 가져 오거나 설정 호출하는 setter 함수가 있습니다. 이 drawBorder 함수는 테두리 모양을 만들고 addElement()를 사용하여이 모양을 추가합니다. – StephenAdams

+0

네, 리팩토링하는 거 알아요. Presenter 패턴을 사용하도록 리팩토링하는 경우 몇 가지 변경 작업을 수행해야합니다. 코딩이 작동하는 방식 일뿐입니다. –

0

드로어 테두리, 스타일 설정, 끌기 & 드롭 관리, 애니메이션 등의 그래픽 작업을 수행하는 모든 코드 부분이 프레젠테이션 모델이 아닌보기에 포함되어야합니다.

PM에서 속성이 변경된 후에 이러한 종류의 그래픽을 실행해야하는 경우 Cairngorm 3 Observer lib를 사용합니다. 기본적으로 프리젠 테이션 모델의 일부 변경 사항을 수신하고 뷰에서 함수를 실행할 수 있습니다.

<cg:ObserveValue 
    source="{ model.firstName }" value="{ Name.SARA }" 
    handler="runEffectFunction"/> 

이 잘 the documentation

+0

Observer 라이브러리를 살펴 봤지만 솔루션에서 Data Binding을 생각하고있었습니다. 내 PresentationModel에서 show/hide 플래그를 설정할 것입니다. 그런 다음이 요소를 내가 추가하려고하는 요소의 visible 속성에 바인딩합니다. 이렇게하면 표시/숨기기 플래그를 변경하고 요소를 추가/해제하는 대신이 페이지가 작성된 현재의 방식으로는 수행 할 수 없도록 전환 할 수 있습니다. – StephenAdams