2010-03-30 3 views
0

Flex에서 바인딩을 잘못 이해하고 있는지 잘 모르겠습니다. Cairngorm 프레임 워크를 사용하고 있습니다. 명령을 호출하고 명령 결과 내에서 같은 라인이 버튼이 아이템 렌더러 내부바인딩에 문제가있는 경우

[Bindable] 
public var friendsSearchResults:ArrayCollection = new ArrayCollection(); 

: 모델 로케이터에서

 [Bindable] 
     var _model:LalModelLocator = LalModelLocator.getInstance(); 
.... 
<s:DataGroup dataProvider="{_model.friendsSearchResults}" 
        includeIn="find" 
        itemRenderer="com.lal.renderers.SingleFriendDisplayRenderer"> 
      <s:layout> 
       <s:TileLayout orientation="columns" requestedColumnCount="2" /> 
      </s:layout>   </s:DataGroup> 

: 나는 코드처럼 다음과 같은 구성 요소가 이 :

model.friendsSearchResults = friendsSearchResults; 

퍼팅 브레이크 포인트와 나는이 같은 불려갑니다과 friendsSearchResults가 업데이트되는 것을 확인 코드를 단계별로.

바인딩 가능한 변수를 업데이트하면 해당 변수의 dataProvider가있는 s : DataGroup이 자동으로 다시 렌더링됩니다.

답변

1

코드 샘플에서 명백하게 잘못된 점은 없습니다. 다른 곳에서는 문제가 있다고 생각하기에 효과가 있습니다.

dataProvider이 할당 된 중단 점을 설정하고 model.friendsSearchResults을 할당하는 것이 좋습니다. 둘 다 동일한 객체 인스턴스를 가리키고 있는지 확인하십시오. 그런 다음 특성 지정 및 해당 이벤트를 단계별로 실행하십시오.

디버깅을 쉽게하려면 기본값 대신 명명 된 이벤트를 사용하도록 전환 할 수 있습니다. 명명 된 이벤트를 사용하면 속성 변경을 수신하는 리스너 대신 특정 속성에 관심이있는 이벤트 리스너 만 트리거됩니다. 이것은 디버그하기가 더 쉽고 빠르게 실행됩니다. 예를 들어, 변경 :

[Bindable] 
public var results:ArrayCollection; 

바인딩이 null 참조 예외와 같은 특정 오류를 숨길 수 있다는 것입니다

[Bindable("resultsChanged")] 
private var _results:ArrayCollection; 
public function get results():ArrayCollection { 
    return _results; 
} 
public function set results(value:ArrayCollection):Void { 
    _results = value; 
    dispatchEvent(new Event("resultsChanged")); 
} 

명심해야 할 또 다른 것은

합니다. 그들은 단순히 값을 사용할 수 없다고 가정하고 오류를 억제합니다. 과제 및 관련 바인딩을 따라 가면 이와 같은 문제를 발견하는 데 도움이됩니다.

+0

훌륭한 통찰력을 가져 주셔서 감사합니다. 다음과 같은 문제의 근원을 감지하는 데 도움이됩니다. var friendsSearchResults : ArrayCollection = model.friendsSearchResults; 하지만 그것은 새로운 변수가 단지 같은 것을 가리키고 있기 때문에 그렇게했을지라도 : model.friendsSearchResults = friendsSearchResults; 이후에는 실제로 모델 변수를 설정하지 않았습니다. – Tam

관련 문제