2010-03-16 6 views
0

사용자 지정 itemRenderer가있는 dataGrid가 있습니다. dataGrid에서 적어도 두 번 탭하면 매번 테이프 아래의 셀이 선택됩니다. saveBackDataGridContent() 메서드에서 코드의 주석을 제거하면 이런 일이 발생하지 않습니다!사용자 지정 데이터 격자에서 매우 이상한 동작

두 번째 문제는 setStyle ("horizontalScrollPolicy", "off");을 설정했지만 입력 한 텍스트보다 Line이 짧으면 horizontalScrollBar가 활성화된다는 것입니다 (업데이트 :이 문제는 아래)!

누가이를 해결할 수 있습니까?

CustomRenderer.mxml :

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" initialize="dataService.send()"> 
<mx:Script> 
    <![CDATA[ 
    import components.ChoiceRenderer; 
    import mx.rpc.events.ResultEvent; 
    import mx.events.DataGridEvent; 

     private function resultHandler(event:ResultEvent):void { 
     var doc:XML = event.result as XML; 
     testGrid.dataProvider = doc.Records.BackSide; 
     } 


     private function saveBackDataGridContent(event:DataGridEvent):void{   
     testGrid.dataProvider[event.rowIndex].TextElement = event.currentTarget.itemEditorInstance.text;   
     }  

    ]]> 
</mx:Script> 
<mx:HTTPService id="dataService" result="resultHandler(event)" url = "data/example.xml" resultFormat="e4x"/> 

<mx:DataGrid id="testGrid" editable="true" itemEditEnd="saveBackDataGridContent(event)"> 
     <mx:columns> 
     <mx:DataGridColumn itemRenderer="components.ChoiceRenderer" width="230"/> 
     </mx:columns> 
</mx:DataGrid> 
</mx:Application> 

ChoiceRenderer.as

package components 
    { 
    import mx.containers.HBox; 
    import mx.controls.CheckBox; 
    import mx.controls.Label; 

    public class ChoiceRenderer extends HBox 
    { 

     private var correctAnswer:CheckBox; 
     private var choiceLabel:Label; 

     public function ChoiceRenderer() 
     { 
     super();    
     setStyle("horizontalScrollPolicy", "off"); 
     correctAnswer = new CheckBox; 
     addChild(correctAnswer); 
     choiceLabel = new Label; 
     addChild(choiceLabel); 
     } 

     override public function set data(xmldata:Object):void{ 
      if(xmldata.name() == "BackSide"){ 
      super.data = xmldata.TextElement[0]; 
      choiceLabel.text = xmldata.TextElement[0].toString(); 
      } 
     } 
    } 
    } 

example.xml

,617,
<TopContainer> 
<Records> 
    <BackSide> 
    <TextElement>first</TextElement>    
    </BackSide> 
    <BackSide> 
    <TextElement>second</TextElement>    
    </BackSide> 
    <BackSide> 
    <TextElement>third</TextElement>    
    </BackSide> 
    <BackSide> 
    <TextElement>fourth</TextElement>    
    </BackSide> 
    <BackSide> 
    <TextElement>fifth</TextElement>    
    </BackSide> 
    <BackSide> 
    <TextElement>sixth</TextElement>    
    </BackSide> 
</Records> 
</TopContainer> 

나는이 문제가 너무 크다는 것을 믿을 수 없다. 그러나 나는 지금까지 어떠한 해결책도 찾지 못했다 ... 내가하려고하는 것이 표준적인 기능이 아닌가? ?

감사 마르쿠스

+3

Markus는 미래에 두 번 올리는 것이 아니라 질문을 편집 할 때 질문을 편집하여 목록 맨 위로 올리는 것을 알고 있습니다. 이것은 사람들이 일하지 않은 것을 볼 수 있기 때문에 일반적으로 더 나은 선택입니다. 이 질문을 삭제하고 이전 질문을 수정하는 것이 좋습니다. – invertedSpear

+0

감사합니다. 귀하의 요지를 이해합니다! – Markus

+0

예제를 단순화하여 우리가 복사하여 붙여 넣기 할 수 있다면 도움을 얻을 수 있습니다.(우리는 응용 프로그램 mxml 파일에 복사하여 즉시 문제를보기 위해 실행할 수있는 무언가를 위해 촬영하십시오.)이 예제 코드는 모두 사용자의 컴퓨터에서 컴파일하려고하면 혼동을 일으키고 작동하지 않을 것입니다 (즉, 누락 된 componenets 또는 데이터 소스). 나는 코드에서 실제로 파고 들지 않고 할 수있는 모든 도움을 당신에게주었습니다. 그러나 100 명의 담당자조차도 당신의 예제를 컴파일하기 위해 취할 45 분을 보낼 것입니다. – invertedSpear

답변

2

당신의 포즈가 아니라 거대한 질문,하지만 당신에게 문제를 제공 할 수있는 몇 가지 포인터.

ItemRenderers는 재활용됩니다. 이것도 문제가 될 수 있습니다. itemRenderer의 if 문에도 else 문 (기본 상태로 다시 설정)이 있는지 확인해야합니다. 이것은 렌더러를 사용할 때 흔히 발생하는 함정입니다.

가로선 setStyle("horizontalScrollPolicy", "off");은 horizontalScrollPolicy가 스타일이 아닌 속성이기 때문에 작동하지 않습니다.

이러한 상황을 수정 한 다음 현재 위치를 확인하십시오.

http://www.adobe.com/devnet/flex/articles/itemrenderers_pt1.html

그리고이 하나 :

http://www.adobe.com/devnet/flex/articles/itemrenderers_pt2.html

그들은 나를 아이템 렌더러과 많은 단점을 이해하는 데 쓸모 있었다

또한이 문서를 참조하십시오.

+0

도움 주셔서 감사합니다. horizontalScrollPolicy 문제는 지금 해결되었습니다 ...하지만 다른 문제는 추가 else 문으로 해결되지 않았습니다 ... – Markus

+0

아마도이 것을 렌더러에 추가해야합니다. protected protected function updateDisplayList (unscaledWidth : Number, unscaledHeight : Number) : void {super.updateDisplayList (unscaledWidth, unscaledHeight);} 문제가 재활용 인 경우 도움이됩니다. – invertedSpear

+0

불행히도 그 두 가지 도움이되지 않습니다 ... XML 데이터를 목록 뒤에 변경하면 언급 된 동작이 발생합니다 – Markus

관련 문제