2011-08-03 4 views
0

J'ai un composant personnalisé dont un objet advancedDataGrid est à l'intérieur. Je veux que ce composant soit réutilisable, donc le besoin est de définir le paramètre selectionMode comme propriété de composant.Composant personnalisé dataGrid selectionMode en tant que propriété

Dans MXML je veux définir la propriété comme ceci:

<comp:MyComp itemDataGridSelectionMode="singleCell" .../> 

intérieur Mycomp actionScript j'ai un metatag comme ceci:

[Inspectable(enumeration="singleRow, multipleRows, singleCell, multipleCells", defaultValue="singleRow")] 
public var itemDataGridSelectionMode:String; 

Comment lier cette variable i ne de itemDataGridSelectionMode à AdvancedDatagrid selectionMode?

MISE À JOUR: Voici une petite application de test code de travail entièrement:

<!--MyComp.mxml--> 
<?xml version="1.0" encoding="utf-8"?> 
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" width="638" height="500"> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 

<fx:Script> 
    <![CDATA[ 
     [Inspectable(enumeration="singleRow, multipleRows, singleCell, multipleCells", defaultValue="singleRow")] 
     public function set itemsSelectionMode(value:String):void 
     { 
      this.adgItems.selectionMode = value; 
     } 

     public function get itemsSelectionMode():String 
     { 
      return this.adgItems.selectionMode; 
     } 
    ]]> 
</fx:Script> 
<mx:AdvancedDataGrid id="adgItems" designViewDataType="flat" width="100%" height="100%"> 
    <mx:columns> 
     <mx:AdvancedDataGridColumn headerText="Column 1" dataField="col1"/> 
     <mx:AdvancedDataGridColumn headerText="Column 2" dataField="col2"/> 
     <mx:AdvancedDataGridColumn headerText="Column 3" dataField="col3"/> 
    </mx:columns> 
</mx:AdvancedDataGrid> 
</s:Group> 

<!-- Application.mxml --> 
<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:comp="*"> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 
<comp:MyComponent x="272" y="86" itemsSelectionMode="singleCell"/> 
</s:Application> 

Erreur: valeur non valide: multipleRows. Il doit s'agir de oneRow, multipleRows, singleCell, multipleCells.

Répondre

2

où vous avez votre public var au sein de votre composant personnalisé, faites ceci:

[Inspectable(enumeration="singleRow, multipleRows, singleCell, multipleCells", defaultValue="singleRow")] 
public function set itemDataGridSelectionMode(value:String):void 
{ 
    advancedDatagrid.selectionMode = value; 
} 

public function get itemDataGridSelectionMode():String 
{ 
    return advancedDatagrid.selectionMode; 
} 
+0

Je pense que c'est la bonne façon. Je vais l'essayer. –

+0

Il donne toujours la même erreur. Il prend singleRow mais pas les autres. –

+0

Et quelle est l'erreur? Avez-vous essayé le débogage? –

0

Je suppose que vous pouvez définir le itemDataGridSelectionMode en tant que [Bindable], puis le lier avec la propriété selectionMode de AdvancedDataGrid.

+0

J'ai essayé et donne une erreur: valeur non valide: multipleRows. Il doit s'agir de oneRow, multipleRows, singleCell, multipleCells. –

+0

Si c'est le cas, essayez d'utiliser des setters comme suggéré par @J_A_X –

0

Une façon est:

BindingUtils.bindProperty(datagridId, 'selectionMode', this, itemDataGridSelectionMode); 

OU Utilisez une méthode setter au lieu de définition variable.

+1

La première solution est horrible puisque vous utilisez la liaison dans un endroit où elle n'est pas nécessaire. Ce dernier est la seule vraie réponse. –

Questions connexes