2009-10-09 7 views
0

mxml 파일 (예 : samp.mxml)에 DataGrid가 있습니다.다른 구성 요소의 한 mxml에서 DataGrid에 액세스하는 방법은 무엇입니까?

<mx:DataGrid id="taskDataGrid" dataProvider="{initDG}" variableRowHeight="true" 
    editable="true" width="100%" paddingBottom="1" paddingTop="1" height="55" > 

<mx:columns> 

     <mx:DataGridColumn dataField="Select" 
       editable="true" 
       rendererIsEditor="true" 
       itemRenderer="mx.controls.CheckBox" 
       editorDataField="selected" /> 

     <mx:DataGridColumn dataField="TaskName" 
       width="220" 
       editable="true" 
       rendererIsEditor="true" 
       itemRenderer="components.taskComponent"/> //i call the component. 

     <mx:DataGridColumn dataField="TaskId" 
       itemRenderer="mx.controls.TextInput" />  

</mx:columns> 
</mx:DataGrid> 

데이터 격자의 열 중 하나에서 텍스트 입력 상자와 버튼을 표시해야합니다. 그래서 난 내가가 구성 요소의 텍스트 입력 상자를 클릭하면 지금, 나는 다른 데이터 행을 추가 할 싶어 taskComponent.mxml

<mx:TextInput id="TaskName" 
    editable="true" 
    text="{data.TaskName}" 
    mouseDown="addTaskRow(event);"  
    /> 

<mx:Button id="searchTask" label="..." width="30" height="25" click="showPopUp();"/> 

을 즉 별도의 구성 요소로서 그 기능을 작성했습니다. 이전에는 데이터 그리드를 클릭하면 행이 추가됩니다. 그래서 samp.mxml 자체에 함수를 작성했습니다. 이 함수는 데이터 격자 행을 추가하는 함수입니다.

private function addTaskRow(event:MouseEvent):void 
     { 
      taskDataGrid.dataProvider.addItem(
       { 

       } 
      ); 
      taskDataGrid.height += 30; 

     } 

taskComponent 파일에 함수를 쓰려고하면 "정의되지 않은 속성 taskDataGrid에 액세스"오류가 표시됩니다. taskComponent에서 DataGrid를 어떻게 사용합니까?

답변

1

텍스트 입력의 mouseDown에 trace(this.owner);을 추가하고 추적 내용을 확인하십시오. [Object DataGrid]와 같은 것을 추적하는 경우 DataGrid(this.owner)을 사용하여 taskDataGrid에 액세스 할 수 있습니다.

+0

불편을 끼쳐 드려 죄송 합니다만, 저는 Flex에 매우 익숙합니다. MouseDown = "trace (this.owner);"를 추가했습니다. 그러나 그것이 무엇을 추적하는지보십시오. FlexBuilder를 사용하고 있습니다. – Angeline

+0

응용 프로그램을 디버그하고 (F11을 누름) 텍스트 입력을 클릭하십시오. Alt-tab을 Flex Builder에 추가하려면 창 메뉴로 이동하여 콘솔을 선택하십시오. (또는 윈도우에서 플렉스 디버깅 퍼스펙티브를 선택한다). 콘솔 패널이 표시됩니다. – Amarghosh

+0

나는 iqa0.VBox4.taskPanel.taskDataGrid를 얻는다 – Angeline

0

그런 식으로하고 싶지는 않습니다. 아마도 상자와 버튼은 새로운 작업을 추가합니다. initDG 변수가 무엇이든간에 새 행을 추가하는 것입니다. ArrayCollection이어야합니다. 그런 다음 추가되면 그리드가 새로 고침되어 새 데이터를 표시합니다.

UI를 데이터로 사용하지 않으려합니다. 당신은 에 데이터를으로 반영하고 싶습니다. 데이터 모델을 수정하고 그리드에 반영되도록 집중하십시오. Flex에 대해 더 자세히 알아야 할 수도 있습니다. DataGrid, dataProvider 및 바인딩이 ArrayCollections와 함께 작동하는 방식에 대해 자세히 학습하는 데 중점을 둡니다.

0

항목 렌더러에 대한 Peter Ent의 기사를 확인하십시오. 매우 유익한 정보이며 유용한 정보를 제공합니다. 나는 ...

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

상위에 액세스 할 수는 ListData을 사용하는 방법, 특히 쇼에이 문서를이 여러 번 언급 한, 나는 그가 매우 유용하다고 말한다 많은 일들을 발견했습니다 구성 요소 -이 작업을 수행하는 올바른 방법 :

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

ListData의 부모에 액세스하기위한 열쇠입니다. 다른 옵션은 렌더러에서 사용자 정의 이벤트를 전달하는 것입니다.

+0

@ Eric this.owner를 사용하면 안되는 이유를 설명하거나 링크 할 수 있습니까? – Amarghosh

관련 문제