2009-10-09 3 views
0

J'ai une grille de données dans mon fichier mxml, disons, samp.mxml.comment accéder à la grille de données dans un mxml dans un autre composant?

<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> 

Dans l'une des colonnes de la grille de données, je dois afficher une zone de saisie de texte et un bouton. J'ai donc écrit cette fonctionnalité en tant que composant séparé, i.e., 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();"/> 

maintenant Si je clique sur la zone de saisie de texte dans le composant, je veux une autre ligne de données à ajouter. Auparavant je l'avais comme, si je clique sur le DataGrid, une ligne est ajoutée. J'ai donc écrit la fonction dans le samp.mxml lui-même. C'est la fonction pour ajouter une ligne de la grille de données.

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

       } 
      ); 
      taskDataGrid.height += 30; 

     } 

Si je tente d'écrire la fonction dans le fichier taskComponent, il montre l'erreur, « L'accès de la propriété non définie taskDataGrid ». Comment utiliser le DataGrid dans le composant taskComponent?

Répondre

1

Ajoutez trace(this.owner); au mouseDown de l'entrée de texte et voyez ce qu'il trace. S'il trace quelque chose comme [objet DataGrid], vous pouvez utiliser DataGrid(this.owner) pour accéder au taskDataGrid.

+0

désolé de vous déranger, mais je suis très nouveau à Flex. J'ai ajouté MouseDown = "trace (this.owner);". Mais où voir ce qu'il trace. J'utilise FlexBuilder. – Angeline

+0

Déboguez l'application (appuyez sur F11) et cliquez sur l'entrée de texte. Alt-tab pour le Flex Builder, allez dans le menu de la fenêtre et sélectionnez la console. (Ou sélectionnez la perspective de débogage flex de window | perspectives). Le panneau de la console sera affiché. – Amarghosh

+0

Je reçois iqa0.VBox4.taskPanel.taskDataGrid – Angeline

0

Vous ne voulez pas le faire de cette façon. Vraisemblablement, la boîte et le bouton ajoutent une nouvelle tâche. Ce que vous voulez faire est d'ajouter une nouvelle ligne à la variable initDG. Ce devrait être un ArrayCollection. Ensuite, quand il est ajouté, la grille sera actualisée pour afficher les nouvelles données.

Vous ne voulez pas que votre interface utilisateur soit les données. Vous voulez que reflètent les données. Concentrez-vous sur la modification d'un modèle de données et laissez simplement cette grille le refléter. Vous pourriez avoir besoin de vous plonger un peu plus dans Flex. Focus sur en apprendre plus sur DataGrid, dataProvider, et comment la liaison fonctionne avec ArrayCollections.

0

Consultez l'article de Peter Ent sur les éléments de rendu. C'est très instructif, et vous permet de connaître quelques bonnes pratiques. J'ai parlé à de nombreuses reprises, et je l'ai trouvé beaucoup des choses qu'il dit être très utile ...

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

Cet article indique notamment vous comment utiliser ListData pour accéder au parent composante - CORRECTEMENT de le faire:

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

ListData est la clé pour accéder au parent. L'autre option consiste à envoyer un événement personnalisé à partir du moteur de rendu.

+0

@Eric Pouvez-vous expliquer/lier quelque chose qui dit pourquoi ce propriétaire ne devrait pas être utilisé? – Amarghosh

Questions connexes