2010-03-11 8 views
0

J'ai dû reformater ma question car j'ai réalisé que j'utilisais une méthode de flexion incorrecte. Mais un problème similaire se produit toujours:coercition implicite lors de l'utilisation de popupmanager en flex

 private function passForm():void { 


      PopUpManager.addPopUp(passTitleWindow, this, true); 
      PopUpManager.centerPopUp(passTitleWindow); 


     } 

          <s:Button includeIn="Detail" x="10" y="329" 
            id= "btn1" 
            label="Pass" 
            click="passForm()" 
            visible="{hasScreen}" /> 

Je clique et la fenêtre contextuelle ne s'affiche pas.

Répondre

1

Vous ne pouvez pas instancier un élément basé sur id. Faites votre TitreWindow dans une autre classe et instancier cela.

PassTitleWindow.mxml

<?xml version="1.0" encoding="utf-8"?> 
<mx:TitleWindow 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    title="Pass" 
    layout="vertical" 
    width="480" 
    height="240" 
    titleStyleName="titleText" 
    backgroundColor="white" 
    backgroundAlpha="1.0" 
    borderColor="white" 
    borderAlpha="1.0" 
    cornerRadius="0" 
    showCloseButton="true" 
    implements="mx.core.IDataRenderer"> 

    <fx:Script> 
     <![CDATA[ 

      private var _data:Object; 
      [Bindable(event="dataChange")] 
      /** 
      * implementing mx.core.IDataRenderer. 
      * Set this value from outside 
      */ 
      public function get data():Object 
      { 
       return _data; 
      } 

      /** 
      * @private 
      */ 
      public function set data(value:Object):void 
      { 
       if (_data == value) 
        return; 
       _data = value; 
       dispatchEvent(new Event("dataChange")); 
      } 
     ]]> 
    </fx:Script> 

    <mx:Text text="Please fill out the following criteria and then click continue." 
     width="100%" 
     styleName="headingText"/> 

    <mx:Form x="-12" y="150" id="passView"> 

     <mx:FormItem label="Age" > 
      <s:TextInput id="ageTextInput" "@{data.age}"/> 
     </mx:FormItem> 
     <mx:FormItem label="Grade" > 
      <s:TextInput id="gradeTextInput"/> 
     </mx:FormItem> 

    </mx:Form> 

</mx:TitleWindow> 

SampleApp.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" 
    creationComplete="creationCompleteHandler()"> 

    <fx:Script> 
     <![CDATA[ 

      import mx.managers.PopUpManager; 

      protected var passWindow:PassTitleWindow = new PassTitleWindow; 

      protected function creationCompleteHandler():void 
      { 
       createForm(); 
      } 

      protected function createForm():void 
      { 
       passWindow = PopUpManager.createPopUp(this, PassTitleWindow, true) as PassTitleWindow; 
       passWindow.data = studentGrid.selectedItem; 
       PopUpManager.centerPopUp(passWindow); 
      } 
     ]]> 
    </fx:Script> 

</s:Application> 

espoir qui aide, Lance

+0

Merci pour la réponse. Le problème que j'avais avec cette approche était que dans un autre composant, j'obtenais studentsGrid est une méthode non définie: La raison pourquoi studentsgrid est défini dans l'application et non dans le composant et je suppose que le composant ne peut pas communiquer avec le DataGrid dans l'application. – JohnMerlino

+0

Je vois. Il est recommandé de séparer vos données afin que les rendus d'élément n'aient pas besoin de référencer leur parent. Vous pouvez le faire en implémentant IDataRenderer (une méthode get/set pour "data") et en définissant les données sur l'élément sélectionné. J'ai mis à jour le code pour le montrer. Faites-moi savoir si cela vous a été utile. –

+0

Enfin obtenu pour mettre à jour le bon article, grâce à vos conseils et ce lien: http://livedocs.adobe.com/flex/3/html/help.html?content=cellrenderer_7.html. Je ne pense pas que je comprends parfaitement cette ligne: dispatchEvent (new Event ("dataChange")). Mais je vais lire l'article à nouveau et voir si elle offre des idées. Merci de m'avoir conduit sur le bon chemin. – JohnMerlino

Questions connexes