2009-04-11 5 views
1

Flex에서 HorizontalList를 가지고 있는데, 여기에는 데이터가 포함되어 있고 ItemRenderer가 페이지를 나타냅니다. 목록의 마지막 항목 (페이지) 다음에는 새 페이지를 만들 수있는 Plus 버튼이 있습니다.Flex에서 List의 마지막 항목 뒤에 버튼을 추가하려면 어떻게합니까?

마지막 ItemRenderer의 적절한 x, y 위치를 얻기 위해 어떤 데이터를 볼 수 있습니까? 나는 나에게 적절한 itemRenderer를 instanceBut을 제공

this.listContent.listItems[this.listContent.listItems.length-1]; 

의 위치를 ​​얻고 있지만, x 및 y는 목록에서의 itemRenderer의 인덱스 위치에 사용되어왔다. UpdateDisplayList()에서 단추를 배치 할 수 있도록 목록 자체를 기준으로 픽셀 단위로 항목을 원합니다.

DataProvider에 있어야하는 것처럼 보이지 않기 때문에 ItemRenderer 자체 대신 UIComponent 무시를 통해이 작업을 수행하고 싶습니다 ... 일부 이상한 "lastItem"이어야합니다. ItemRenderer가 찾은 객체가 이상하게 보입니다. 또한, 이것은 일반적으로 목록에 대해 상당히 유용한 기능입니다.

그래서이 아이디어 나 다른 접근법에 대한 아이디어가 있습니까?

답변

0

itemRenderer가 재사용되기 때문에 마지막 item의 실제 itemRenderer를 얻기가 어렵 기 때문에 어느 것이 항상 마지막이 될지 결정하기가 어렵습니다. 데이터에서 "lastItem"변수를 확인하는 것이 아마도 이것을 구현하는 가장 쉬운 방법 일 것입니다.

그러나 outerDocument 속성을 인라인 itemRenderer와 함께 사용할 수는 있습니다. 이렇게하면 목록에 액세스 할 수 있습니다.

<mx:List> 
    <mx:itemRenderer> 
     <mx:Component> 
      <ns1:MyRenderer addLastButton="{outerDocument.myList.dataProvider.index == 10}"/> 
     </mx:Component> 
    </mx:itemRenderer> 
... 
</mx:List> 
+0

itemRenderers가 재사용되는 경우에도 목록은 특정 itemrenderer가 목록의 마지막 항목을 표시했는지 여전히 알 수 있습니다. 그래도 내 관점에서 가장 큰 문제는 모든 itemrenderers의 로컬 X, Y를 가져올 수 없다는 것입니다. 그게 가능했다면, 대부분 해결 될 것 같았습니다. –

+0

지역 X와 Y가 필요한 부분을 이해하지 못합니다. 이론적으로 목록의 크기를 취하고 표시된 항목으로 나누고 마지막 항목의 위치를 ​​보간 할 수 있습니다. – CookieOfFortune

+0

만약 내가 작동시킬 셀이나 itemRenderer의 크기를 얻을 수 있다고 가정합니다. 좋은 지적! –

0

은 아마 itemEditor를 사용하여 수행하는 올바른 방법있다 그러나 나는 이런 식으로 뭔가를 시도 할 것입니다 :

  1. 목록에 데이터를 새로 고칠 때마다 추가 널 객체를 추가합니다.
  2. here과 같이 설정된 데이터를 무시하는 itemRenderer를 가져야합니다.이 객체는 null 인 경우 객체를 확인하고 true 인 경우 바인드 가능 부울 isAddable을 true로 설정합니다.
  3. 이 부울 값은 textInput, label 및 button의 가시성 및 includeInLayout 속성을 제어합니다.
  4. 클릭하면 몇 가지 유효성 검사를 통해 목록에 새 항목을 추가하는 버튼이 이벤트를 전달하도록합니다.
0

dataProvider (데이터 "버튼")와 함께 하나 이상의 항목을 추가하고 목록 모양에 Button (상태로 구현 될 수 있음)이 변경되는 목록에 대한 사용자 정의 itemRenderer를 만들려고 할 수 있다고 생각합니다. data = = "button"

0

목록에서 - 이벤트 creationComplete를 추가하고 해당 구현 내에서 이전 항목에서 연기 할 특정 문자열을 사용하여 목록에 다른 항목을 추가합니다. 2 주 추가 해제 물론,

currentState="{data.sname == '%your string%' ? 'last' : 'normal'}" 

: 그리고 당신이 아이템 렌더러 태그에서이 속성을 추가하면 상태에 따라 텍스트 레이블을 조정하여 렌더러를 조작 할 수 있습니다, 그 후

<s:states><br/> 
     <mx:State name="normal"/> 
     <mx:State name="last"/> 
    </s:states> 

을, 예:

<s:Label text.normal="{%whatever%}" text.last="this is the last item"/> 

희망 하시겠습니까?

+0

또한 - 다른 좋은 답변 : http : //www.switchonthecode.com/tutorials/adding-dynamic-rows-to-flex-datagrid – Assaf

관련 문제