몸을 풀다:mxml 페이지 전반에 걸쳐 함수/구성요소에 액세스

StackOverflow https://stackoverflow.com/questions/187795

  •  06-07-2019
  •  | 
  •  

문제

단순화를 위해 두 개의 flex mxml 페이지가 있다고 가정하겠습니다.

form.mxml
버튼.mxml

form.mxml 페이지에 다음 코드가 있으면 제대로 작동합니다.

<custom:SelectView dSource="{_thedata}" id="form" visible="false">
</custom:SelectView>

<mx:LinkButton label="Show" id="lbShow" click="form.visible=true;>
<mx:LinkButton label="Show" id="lbHide" click="form.visible=false;>

그러나 코드가 다음과 같다면:

form.mxml

 <custom:SelectView dSource="{_thedata}" id="form" visible="false">
 </custom:SelectView>

버튼.mxml

<mx:LinkButton label="Show" id="lbShow" click="form.visible=true;>
<mx:LinkButton label="Show" id="lbHide" click="form.visible=false;>

form.mxml을 변경하기 위해 버튼.mxml에서 호출하는 방법은 무엇입니까?

---- 조금 더 자세히 ---

내 페이지는 실제로 다음과 같습니다.여기서 query:AdvancedSearchFields는 기본적으로 페이지에 플렉스 양식을 포함하고 있으며 검색이 완료된 후 아래 사용자 정의 보기를 표시하거나 숨기도록 하고 싶습니다.

<query:AdvancedSearchFields searchType="projects" searchCategory="advanced" visible="true" id="AdvancedSearch" />

<custom:SelectView dSource="{_searchResults}" id="sv" visible="false">
도움이 되었습니까?

해결책

버튼 클릭 이벤트를 처리하고 사용자 정의 이벤트를 발생시키는 사용자 정의 메서드를 작성할 수 있습니다.그런 다음 form.mxml에서 해당 이벤트를 처리할 수 있습니다.

이렇게 분할하면 Button.mxml 파일이 자체적으로 작동하게 되므로 좀 더 깔끔해집니다.Button.mxml에 양식에 대한 직접 참조가 있으면 둘 사이의 긴밀한 결합이 발생하므로 일반적으로 긴밀한 결합을 피해야 합니다.

편집하다:나는 타이트 커플링을 피하고 좀 더 간단한 또 ​​다른 생각을 했습니다.

form.mxml

<custom:SelectView dSource="{_thedata}" id="form" visible="{buttons.showForm}">
</custom:SelectView>

<!-- include your buttons.mxml component using an ID of "buttons" -->

버튼.mxml

<mx:Script>
<![CDATA[
    [Bindable] public var showForm:Boolean = true;
]]>
</mx:Script>

<mx:LinkButton label="Show" id="lbShow" click="this.showForm=true;">
<mx:LinkButton label="Hide" id="lbHide" click="this.showForm=false;">

이는 본질적으로 변수 바인딩을 사용하여 사용자 정의 이벤트 사용을 에뮬레이트합니다.버튼의 showForm 변수가 변경될 때마다 SelectView의 visible 속성이 바인딩을 통해 업데이트됩니다.이는 사용자 정의 이벤트를 생성하는 것보다 가볍습니다(비록 사용자 정의 이벤트가 디자인 측면에서는 조금 더 낫다고 생각하지만).

다른 팁

당신의 button.mxml 클래스는 영향을받는 '양식'클래스의 인스턴스를 참조해야합니다. 그런 다음 직접 작동 할 수 있습니다.

button.mxml :

<mx:Script>
<![CDATA[
    [Bindable] public var myForm:MyFormClass;
]]>
</mx:Script>

<mx:LinkButton label="Show" id="lbShow" click="myForm.form.visible=true;">
<mx:LinkButton label="Show" id="lbHide" click="myForm.form.visible=false;">

일반적 으로이 변수를 설정하는 가장 논리적 인 장소는 Button 수업.

이 문제를 더 자주 처리해야한다면 PUREMVC와 같은 MVC 프레임 워크를 사용하는 것이 좋습니다. MXML 구성 요소의 이벤트에 대해 청소하는 중재자 객체를 갖도록 설정 한 다음 다른 중재자가 선택할 수있는 알림을 보냅니다. 그런 다음 해당 중재자는 알림 및 관련 데이터를 기반으로 자체 시각적 구성 요소를 조작 할 수 있습니다.

당신이하고있는 일 (간단한 버전)의 맥락에서, 당신은 기본 솔루션이 괜찮습니다. 그러나 많은 논리를 가진 4 ~ 5 개 이상의 구성 요소를 다루면 전혀 행복하지 않을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top