2014-09-18 2 views
0

Je cet extrait dans mon MXML:appel fonction du bouton à l'intérieur DataGrid

... 

<mx:Script source="main.as" /> 

... 

<mx:Button id="works" click="someClick()" /> 
<xDComponents:DataGrid id="tp_list" width="100%" height="100%"> 
    <xDComponents:columns> 
     <mx:DataGridColumn dataField="barcode" headerText="{_s('Barcode')}" /> 
     <mx:DataGridColumn width="10"> 
      <mx:itemRenderer> 
       <mx:Component> 
        <mx:Button label="-" click="someClick()" /> 
       </mx:Component> 
      </mx:itemRenderer> 
     </mx:DataGridColumn> 
    </xDComponents:columns> 
</xDComponents:DataGrid> 

... 

(le xDComponents:DataGrid est dérivé de DataGrid)

En main.as je:

private function someClick():void { 
    // do stuff 
} 

Dans le premier Button (id="works"), le code fonctionne et le gestionnaire est appelé. Dans le DataGrid cependant, je reçois l'erreur

appel à une méthode someClick

Comment peut-undefined puis-je faire ma fonction à la disposition du bouton à l'intérieur de la grille de données?

Répondre

2

Vous pouvez utiliser la propriété outerDocument pour accéder à l'extérieur de itemRenderer.

Exemple dans votre cas:

<mx:Button label="-" click = "{ outerDocument.someClick() }" /> 
+0

Bien que cela fonctionne, il est l'architecture pauvre. La propriété itemRenderer est une classe distincte à part entière, et cette approche est très étroitement liée à la classe MXML parente. – Brian

1

La solution correcte consiste à envoyer un gestionnaire d'événements lorsque vous cliquez sur le bouton et d'écouter cet événement sur la grille de données ou n'importe où dans la chaîne d'événements. Le code actuel ne fonctionne pas parce que le rendu de l'élément est compilé dans une classe distincte et qu'il n'aura pas accès à la méthode que vous voulez appeler. Le moteur de rendu n'a donc pas accès à l'extérieur. Je ne vais pas coller un exemple ici, juste la recherche sur chaud pour faire et envoyer un événement personnalisé, faites également attention à la propriété bubles d'un événement.

Questions connexes