2012-12-11 2 views
0

Flex의 여러 그래프간에 전환되는 응용 프로그램이 있습니다. 각 그래프는 자신의 상태입니다. MXML에서는 상태 변경시 이미지 소스가 변경되도록 설정했습니다.상태를 변경하면 즉시 Flex에서 변경됩니다.

<s:Image id="chartImage" 
     source.all="{ callImages.all }" 
     source.classA="{ callImages.classB }" 
     source.classB="{ callImages.classA }" 
     /> 

버튼이있어 이미지가 성공적으로 변경됩니다. 이미지 요소가 끝날 때까지 일이 표시되지 않습니다 그러나, 나는 그러나 s의 실제 변화가 줄 뒤에

this.currentState = chartName; 

내 코드는 그래프 이미지 소스가 변경 될 것으로 예상하기 때문에 발생하는 작은 버그가 기능이 끝나고 화면이 업데이트됩니다. 그래서 chartImage.height을 잡을 때, 나는 방금 떠난 상태의 오래된 것을 사용합니다.

새 이미지를 가져 와서 치수를 계산할 수있는 방법이 있나요? 다음 줄의 치수로 계산할 수 있습니까? 지금까지 chartImage.height는 상태가 변경되기 전의 높이를 반환하지만 함수가 실행 된 후에는 높이가 다릅니다.

나는 몇 분의 1 초 후에 타이머를 실행 한 다음 거기에서 줄을 실행할 수있다. 그러나, 나는 화면을 렌더링하고 내 코드를 계속 진행하라고 말하고 싶습니다. 이것이 가능한가? 그것은 단지 더 우아한 것처럼 보인다.

답변

2

는 새로운 이미지를 얻을 수있는 방법이 있나요 (이 때문에 그것의 크기) 다음 줄에 그 치수 그래서 내가 할 수있는 계산?

각 Flex 구성 요소는 Flash Player의 렌더링 메커니즘 위에 구축 된 자체 유효성 검사주기를 거쳐야합니다. Flash/Flex Elastic Racetrack에 대한 Google 검색을 수행하면 위대한 게시물이 있습니다.

그러나 validateNow() 메서드를 호출하여 구성 요소가 선형 방식으로 해당 유효성 검사 메서드를 실행하도록 할 수 있습니다.

특히 상태 전환이있는 경우 currentState 변수를 설정 한 후에도 이미지의 속성이 변경되지 않았을 수 있습니다.

1

일반적으로 Flex에서 이미지의 소스를 변경 한 다음 높이를 "다음 줄에"확인하면 원본은 원시 비트 맵이지만 Flex의 레이아웃 프레임 워크 일 수도 있습니다 다른 요소에 따라 달라 지므로이 문제에 의지하지 않을 것입니다.

이것은 Flex의 고전적인 문제입니다. 프레임 워크의 아름다움과 불행은 변화를 점진적으로 렌더링하여 응용 프로그램의 응답 성을 극대화한다는 것입니다. 이 프로세스에 대한 자세한 내용은 Google의 "플렉스 구성 요소 수명주기"에서 확인할 수 있습니다.

이 문제를 처리하는 데는 몇 가지 방법이 있습니다. 일반적으로 바인딩 표현식은 비동기식 레이아웃 변경과 같은 이유로 설계되었습니다. 코드 집합을 과도하게 사용하지는 않지만 코드베이스를 간단하고 유연하게 유지하는 견고한 도구입니다.

당신은 MXML을 통해 SparkImage의 높이에 결합 할 수 있습니다

<s:Image id="chartImage" /> 
<s:Label id="debugLabel" text="{ 'Height of chartImage: ' + chartImage.height }" /> 

하지만 당신은 내가 (스크립트 블록 단위) BindingUtils를 사용하는 것이 좋습니다 것 논리를 실행해야하는 경우 :

import mx.binding.utils.BindingUtils; 

protected function someOtherFunctionBlock():void 
{ 
    BindingUtils.bindSetter(handleHeigtChange, image, "height"); 
} 

protected function handleHeigtChange(value:Number):void 
{ 
    // Deal with value change 
} 
+0

을 감사. 좋은 정보. 그건 내 코드의 요구 사항을 충족시키지 못하지만 많은 레이아웃 문제를 해결할 수 있습니다. – ShawnPConroy

관련 문제