2011-06-15 3 views
0

내 맞춤 목록에 이상한 문제가 있습니다.플렉스 목록 선택 및 렌더링 문제가 발생했습니다.

나는 직원 목록을 보여줄 필요가있는 목록을 정의했다. 내 사용자 지정 목록에서 concrete ID로 직원을 선택 (강조 표시)하기 위해 selectedId 속성을 제공하려고합니다. 목록은 [http://blog.flexdevelopers.com/2010/02/flex-examples-binding-value-to-combobox.html]에 따라 생성됩니다.

이 내 사용자 지정 목록에 대한 코드입니다 ...

<mx:List ....> 
<mx:Script> 
<![CDATA[ 

private var _selectedId:int; 

public function get selectedId():int 
{ 
    //... 
} 
public function set selectedId(id:int):void 
{ 
    _selectedId=id; 
    invalidateProperties(); 
    invalidateDisplayList(); 
} 
override protected function commitProperties():void 
{ 
    super.commitProperties(); 
    if(dataProvider!=null) 
     setSelectedId();  
} 
protected function setSelectedId():void 
{ 
    var subordinates:ArrayCollection=dataProvider as ArrayCollection; 
    var subordinate:EmployeeSimpleDTO=null; 
    for(var i:int=0;i<subordinates.length;i++) 
    { 
     var sub:EmployeeSimpleDTO=(subordinates.getItemAt(i))as EmployeeSimpleDTO; 
     if(sub.employeeId==_selectedId) 
     { 
      subordinate=sub; 
     _selectedId=sub.employeeId; 
     break; 
     } 
    }    
    selectedItem=subordinate; 
} 
override protected function collectionChangeHandler(event:Event):void 
{ 
    super.collectionChangeHandler(event); 
    invalidateProperties(); 
    invalidateDisplayList(); 
}]]> 
<mx:Script> 
<mx:itemRenderer> 
    <mx:Component> 
     <view:SubordinatesListItem employeeId  = "{data.employeeId}" 
            employeeName  = "{data.employeeName}" 
            employeeSurname = "{data.employeeSurname}" 
            employeeUsername = "{data.employeeUsername}"/> 
    </mx:Component> 
</mx:itemRenderer> 
</mx:List> 

편집
이 내가 selectedId 재산에 대한 몇 가지 값을 바인딩 내 아이템 렌더러 내 코드에서

<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100%"> 
<mx:Script> 
    <![CDATA[ 

     [Embed(source="/assets/employeeIcon.png")] 
     [Bindable] 
     private var employeeIcon:Class; 

    [Embed(source="/assets/infoIcon.png")] 
     [Bindable] 
     private var infoIcon:Class; 


     //----------------------------- 
     // private var declarations 
     //----------------------------- 

     private var _employeeId:int; 

     public function get employeeId():int 
     { 
      return _employeeId; 
     } 
     public function set employeeId(id:int):void 
     { 
      _employeeId=id; 
     } 

    private var _employeeName:String; 

    [Bindable] 
     public function get employeeName():String 
     { 
      return _employeeName; 
     } 
     public function set employeeName(name:String):void 
     { 
      _employeeName=name; 
     } 

    private var _employeeSurname:String; 

    [Bindable] 
     public function get employeeSurname():String 
     { 
      return _employeeSurname; 
     } 
     public function set employeeSurname(surname:String):void 
     { 
      _employeeSurname=surname; 
     } 

    private var _employeeUsername:String; 

    [Bindable] 
     public function get employeeUsername():String 
     { 
      return _employeeUsername; 
     } 
     public function set employeeUsername(username:String):void 
     { 
      _employeeUsername=username; 
     }   

    private function dispatchShowSubordinateDetails():void 
    { 
    dispatchEvent(new Event("showSubordinateDetails",true)); 
     }   

    ]]> 
</mx:Script> 
<mx:Metadata> 
    [Event(name="showSubordinateDetails", type="flash.events.Event")] 
</mx:Metadata> 
<mx:Image source="{employeeIcon}" scaleX="0.35" scaleY="0.35"/> 
<mx:Label text="{employeeName} {employeeSurname}"/> 
<mx:Label text=" [{employeeUsername}]" color="#8D8D8D"/> 
<mx:Spacer width="100%"/> 
<mx:LinkButton icon="{infoIcon}" click="dispatchShowSubordinateDetails()" width="30"/> 
</mx:HBox> 

을위한 코드입니다 사용자 정의 목록 (목록은 popup - TitleWindow 내에 있습니다). 단지 최대 selectedId으로 동일한 ID를 가지고 내 사용자 지정 목록, 직원,의, 가 시각적으로 선택하지 않은 최초의 쇼에 지금

, 목록에서을 (컬러). 내가 시각적으로 말했을 때 나는 내 custom list의 selectedItem 또는 selectedIndex 속성을 취할 때 올바른 객체와 색인을 얻는다는 것을 의미한다.

, 내가 선택해야합니다 항목 위에 마우스를 출시하는 중요한 첫 공연 업, 에, 그것은 내가 출시 후 (그녀는해야한다로) 선택된 상태로 유지 훨씬 더.

이후 show ups는 예상대로 작동합니다.

나는 내 문제에 대해 "플라스틱"설명을하려고 했으므로, 약간의 정보를 주시면 제발 실례합니다. 나는 그 문제가 무엇인지 알지 못한다. 어떤 아이디어?

+0

문제를 재현 할 수 없으므로 문제를 재현 할 수있는 몇 가지 샘플 코드를 제공해 주시겠습니까? 사용자 정의'itemRenderer'를 사용하고 있습니까? – bmleite

+0

@bmleite - 예 맞춤 렌더러가 있습니다 (질문이 업데이트 됨). 나는 (제한된 공간 때문에) 내 코드 컨텍스트를 간소화했으며, 솔직히 말해서 나는 간단한 시나리오에서 문제를 반복하는 데 성공하지 못했다. 확실히, 문제는 일반적으로 내 코드와 관련이 있습니다. 그러나 리뷰의 어느 부분을 검토해야할지 모르겠습니다. – slomir

+0

사용자 지정 목록이 포함 된 구성 요소를 격리하고 양식, 목록 등을 채우기 위해 일부 정적 데이터를 사용하여 문제를 복제하십시오. 문제를 찾는 것이 최선책 인 것 같습니다. 먼저 코드를 보지 않고 검토해야하는 부분을 말하기는 어렵습니다. – bmleite

답변

0

마지막으로, 실수를 발견했습니다.

내 맞춤 목록이 상위 구성 요소의 양식에 있기 때문에 팝업이 표시되고 바인딩이 발생하기 전에 모든 양식 요소를 재설정하는 기능을 만듭니다. 이 코드에서는 myCustomList.selectedItem=null을 입력하고 해당 행을 제거하면 모든 것이 예상대로 작동합니다.

여전히 초기 동작의 이유는 확실하지 않습니다.

관련 문제