2009-09-04 11 views
0

Je crée un objet DataGrid avancé avec actionscript.Création d'un objet ItemRender personnalisé dynamique (constructeur)

J'ai créé une classe actionscript où je tends l'objet VBox:

core paquet {import mx.containers.VBox; import mx.controls.TextInput;

customItemRender public class étend VBox { fonction publique customItemRender (_TextInput: TextInput, _TextInput2: TextInput) {// TODO: mettre en œuvre la fonction super.addChild (_TextInput); super.addChild (_TextInput2);
}} }

Le problème vient quand je déclare de itemrender propriété sur la grille de données:

AdvancedDataGridColumn.itemRenderer = new ClassFactory (customItemRender (_TextInput1, _TextInput2));

Le compilateur ne me laissera pas instancié mon customItemRender.

Est-ce que quelqu'un sait s'il existe une solution alternative pour résoudre le problème?

Merci à l'avance pour vous aider,

Cordialement Javier

Répondre

0

Je n'ai essayé de le faire en utilisant MXML. Dans ce cas, je dois généralement enrouler l'instance IListItemRenderer dans les balises mx: Component. Je ne suis pas exactement sûr de ce qui se passe par programme quand je fais cela, mais cela fonctionne. La raison en est que itemRender recherche en fait une instance d'IFactory plutôt qu'une instance, donc je suppose que je le ferai strictement en utilisant AS, ce qui serait nécessaire pour créer votre propre implémentation IFactory.

par exemple.

<mx:List> 
<mx:itemRenderer> 
    <mx:Component> 
    <mx:Text /> 
    </mx:Component> 
</mx:itemRenderer> 
</mx:List> 
+0

Salut, Je sais comment l'utiliser avec des balises MX, son que vous avez dit, en utilisant d'abord l'étiquette de composant, mais ma question est de savoir comment fais ça en as3. Cordialement –

0

Le constructeur de ClassFactory a une classe en tant que paramètre et non une instance. Vous devez appeler:

new ClassFactory(customItemRender); 

et non:

new ClassFactory(new customItemRender(_TextInput1,_TextInput2)); 

ou:

new ClassFactory(customItemRender(_TextInput1,_TextInput2)); 

Maintenant, puisque le constructeur ne sera pas appelé en référence à TextInput1 et TextInput2, vous aurez besoin d'instancier vos propres TextInputs dans le rendu personnalisé lui-même. (Mais c'est une bonne chose, si vous continuez à appeler new customItemRender (_TextInput1, _TextInput2), alors les deux TextInputs ne seront ajoutés qu'à l'instance LAST de customItemRender, et tous les autres n'auront pas ces deux objets).

2

private var _ItemRendère: ClassFactory;

private function get MyItemRendere():ClassFactory 
{ 
    if (_ItemRendere == null) 
    { 
     _ItemRendere = new ClassFactory(); 
     _ItemRendere.generator = customItemRender; 
     _ItemRendere.properties = { 
      _TextInput1:MY_TextInput1_OBJECT, 
      _TextInput2:MY_TextInput2_OBJECT 
       }; 
    } 
    return _ItemRendere; 
} 

vous pouvez utiliser

AdvancedDataGridColumn.itemRenderer = MyItemRendere;