2009-08-18 5 views
1

안녕하세요. 제공 할 수있는 도움에 대해 미리 감사드립니다.HTTPService의 동적 URL이 작동하지 않습니다.

내 AIR 응용 프로그램은 웹 서비스를 쿼리하여 빌드 할 구성 요소를 확인합니다. 반환 된 XML의 예입니다 : 나는 데이터의 MXML 컴퍼넌트의 HTTPService의 해당 구성 요소를 검색 할 수 있도록 세트에 필드에 저장되어있는 URL을 전달하려고

<item> 
<type>EventList</type> 
<url><![CDATA[http://dashboard/cgi-bin/dataService.pl?type=ManagedEvents]]></url> 
<index>4</index> 
<title>Index 4 eventlist</title> 
<description>Application 4</description> 
</item> 

. 를 둘러싸는 응용 프로그램은 위의 XML의 벌금을 분석하고 다음을 수행합니다

component.getData(url); 

구성 요소에 GetData의는 여기서

public function getData(url:String):void { 
    ws = url; 
    dataService.send(); 
} 

<mx:HTTPService 
     id="dataService" 
     url="{ws}" 
     resultFormat="e4x" 
     result="resultsHandler(event);" 
     fault="faultHandler(event);" 
     useProxy="false" 
    /> 

송신()가 호출되면, 내가 다음 오류가 발생합니다.

[FaultEvent fault = [RPC 오류 faultString = "useProxy가 설정된 URL을 지정해야합니다 거짓으로. " faultCode = "Client.URLRequired"faultDetail = "null"] messageId = null 유형 = "오류"bubbles = false cancelable = true eventPhase = 2]

내가 잘못하고있는 것에 대한 단서가 있습니까? (도움을 주셔서 다시 감사) 그것은 당신이 WS 변수를 정의하는 방법에 따라 달라

TB

+0

작동하는 crossdomain.xml 파일이 있습니다. 위의 경우 ws는 [Bindable] public var ws:String; Todd

+0

으로 정의됩니다. 흥미롭게도 위의 getData를 다음과 같이 변경하면 getData (url : String) : void {dataService.url = item; dataService.send();} 작동합니다. 이것은 {ws}의 데이터 바인딩 문제를 암시합니까? – Todd

답변

1

데이터 바인딩은 이벤트 시스템을 통해 비동기 적으로 작동하며 바인드 가능 변수를 변경 한 후 지정되지 않은 시간이 발생합니다. 귀하의 경우에는 dataService.send()를 호출 할 때 ws의 업데이트 이벤트가 아직 시작되지 않았습니다. 이 때문에 url 속성을 직접 변경하면 바인딩이 작동하지 않습니다.

응용 프로그램 설계로 인해 서비스에 직접 액세스 할 수 없기 때문에 데이터 바인딩을 사용해야하는 경우 제어하는 ​​getter 및 setter 함수로 속성에 바인딩하는 것이 좋습니다.

2

. 데이터 바인딩에 사용할 수 있도록 지정하기 전에 [Bindable] 메타 태그가 있어야합니다. 예를 들어 : 물론

[Bindable] 
public var ws:String; 

당신은 또한 단지 대신에 다음과 같이 데이터 바인딩을 사용하는 명시 적으로 HTTPService를 객체의 url을 설정할 수 있습니다 :이 도움이

public function getData(url:String):void { 
    dataService.url = url; 
    dataService.send(); 
} 

희망을.

관련 문제