2009-02-04 6 views
4

에서 메인 mxml에 액세스하여 웹 서비스 호출을 처리하는 actionScript 클래스를 작성합니다. 결과를 검색 할 때 주 mxml 응용 프로그램에서 setter 메서드를 호출하려고합니다. 내 문제는 내가 내 ActionScript 스크립트 클래스, 내 아이디어에서 내 주요 mxml 클래스의 actionScript 섹션에있는 메서드에 액세스하는 방법을 모른다는 것입니다?플렉스 3는 액션 스크립트 코드

답변

7

David는 맞습니다. Application.mxml 객체의 public 멤버에 정적으로 액세스 할 수 있고 응용 프로그램의 어느 위치에서나 액세스 할 수 있지만 디자인 적으로는 no-no입니다. 객체 간의 느슨한 결합을 위해 노력하는 것이 좋습니다. 일반적으로 Flex 관용구에서 수행되는 방식은 EventDispatcher를 확장하고 이벤트를 전달하는 것입니다. 이 같은

public class MyWrapperClass extends EventDispatcher 
{ 
    [Event(name="webserviceComplete", type="flash.events.Event")] 

    public function MyWrapperClass(target:IEventDispatcher=null) 
    { 
     super(target); 
    } 

    private function handleWebServiceLoadComplete(event:ResultEvent):void 
    { 
     dispatchEvent(new Event("webserviceComplete")); 
    } 

    public function doWork():void 
    { 
     // Load the service, etc., and ultimately call handleWebServiceLoadComplete()... 
    }  
} 

...하고 Main.mxml 파일 : 그래서 예를 들어, WebService에 래퍼 이런 식으로 뭔가 보일 수 있습니다이 경우

<mx:Script> 
    <![CDATA[ 

     private function app_creationComplete(event:Event):void 
     { 
      var myWrapper:MyWrapperClass = new MyWrapperClass(); 
      myWrapper.addEventListener("webserviceComplete", mywrapper_webServiceComplete, false, 0, true); 
      myWrapper.doWork(); 
     } 

     private function mywrapper_webServiceComplete(event:Event):void 
     { 
      // Do the work you would've otherwise done in the public method 
     } 

    ]]> 
</mx:Script> 

을, 최종 결과는 동일합니다 - - 웹 서비스로드를 완료하면 Main.mxml의 함수가 트리거됩니다. 그러나 mywrapper_webServiceComplete()이 개인적으로 선언되는 방법에 주목하십시오. MyWrapperClass에 의해 직접 호출되지는 않습니다. Main.mxml은 MyWrapperClass가 작업을 마쳤을 때 알림을 받기 위해 간단히 (addEventListener()을 사용하여) 구독 한 다음 자체 작업을 수행합니다. MyWrapperClass는 Main.mxml의 구현에 대한 세부 사항을 전혀 알지 못하며, Main.mxml은 webserviceComplete 이벤트를 전달하고, doWork() 공개 메서드를 노출한다는 것 이외의 MyWrapperClass에 대해 아무것도 알지 못합니다. 느슨한 커플 링 및 정보 숨기기.

행운을 빈다.

6

클래스가 구성 요소 트리에 추가 된 UIComponent 인 경우 해당 parentApplication 특성을 사용할 수 있습니다. 그렇지 않으면 응용 프로그램 초기화가 완료된 후에 만 ​​정적 Application.application 속성을 사용하십시오. 그보다 앞서 필드는 null입니다. 개인 필드와 메소드는 분명히 액세스 할 수 없습니다. 명시적인 id로 MXML 부분에서 선언 된 요소는 public입니다.

그런 호출을 추가하면 고정 바인딩이 만들어집니다. 대신 이벤트를 보내고 주 응용 프로그램에서이 이벤트를 처리하는 것이 좋습니다.

1

경우 사람이 같은 문제가 있습니다

mx.core.FlexGlobals.topLevelApplication.YOUR_FUNCTION

하면 main.mxml 내에서 공공 기능에 액세스 할 수있는 구문입니다.

관련 문제