Aide - Recherche - Membres - Calendrier
Version complète : CreatePopup
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Flex
kiki650
Je prends l'exemple donné dans Flex builder pour mettre en place l'ouvertue d'un popup. (Je n'ai vraiment pas trouvé d'exemple sur le net simple pour apprendre)

Je voudrais savoir ce qui ne va pas dans l'écriture:

CODE

import mx.managers.PopUpManager;
import mx.core.IFlexDisplayObject;
var helpWindow:TitleWindow = TitleWindow(PopUpManager.createPopUp(this,Afficher_Detail, false));


Dans Afficher_Detail.mxml:
CODE

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="30%" height="30%" horizontalAlign="center" verticalAlign="middle">
    <mx:Script>
        <![CDATA[
                import mx.managers.PopUpManager;
        ]]>
    </mx:Script>
<mx:Button label="Cancel" click="PopUpManager.removePopUp(this);"/>
</mx:HBox>


Je voudrais pouvoir aussi ajouter le bouton fermer : helpWindow.showCloseButton=true;
Et surtout je voudrais pouvoir passer en paramètre à mon popup l'id de la personne pour afficher le détail. Et ca je n'ai trouvé aucune aide.
Merci pour votre aide.
iteratif
Si tu veux avoir le comportement de TitleWindow, il faut que ton composant Afficher_Detail qui est une classe, doit etre basé sur TitleWindow et non sur HBox :

Xml
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" horizontalAlign="center" showCloseButton="true" verticalAlign="middle">
<mx:Script>
<![CDATA[
import mx.managers.PopUpManager;
]]>

</mx:Script>
<mx:Button label="Cancel" click="PopUpManager.removePopUp(this);"/>
</mx:TitleWindow>
kiki650
merci Itératif, j'avais pas fait attention.

Tu pourrais me dire comment on peut passer une variable à ce popup?
Comment passer une valauer et paramètre et la récupérer dans mon popup:
CODE

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" horizontalAlign="center" showCloseButton="true" verticalAlign="middle"
     creationComplete="init()">
    <mx:Script>
        <![CDATA[
                import mx.managers.PopUpManager;
                public var contenu : String;
                public function init(): void
                {
                    TAcontenu.text = contenu;
                }
        ]]>
    </mx:Script>
    <mx:TextArea id="TAcontenu" width="190" height="130" />
<mx:Button label="Fermer" click="PopUpManager.removePopUp(this);"/>
</mx:TitleWindow>


helpWindow. quelque chose non?

Aussi, est ce que tu serais (dans mon post précédent) pourquoi mes checkbox sont cochées au lancement de l'application. je l'ai mis a false mais ca n'y fait rien...

helpWindow.document.contenu OK j'ai trouvé.

Mais tu sais pour mes checkbox?
im_shinji
Essaie avec ce code :
CODE
private function fonction_de_la_fenetre_parente():void{
var pop1:mafenetre_popup = mafenetre_popup(PopUpManager.createPopUp(this,mafenetre_popup,true));
pop1.variable_de_la_fenetre_popup=variable_de_la_fenetre_parente;
}
kreposucre
CITATION(im_shinji @ May 2 2007, 09:21 PM) *
Essaie avec ce code :
CODE
private function fonction_de_la_fenetre_parente():void{
var pop1:mafenetre_popup = mafenetre_popup(PopUpManager.createPopUp(this,mafenetre_popup,true));
pop1.variable_de_la_fenetre_popup=variable_de_la_fenetre_parente;
}


Celan ne fonctionne pas, aucun accès n'est possible directement de cette façon, je suis confronté au meme problème
Fusion
http://flex.mediabox.fr/index.php?showtopi...;hl=createPopup

J'avais proposé une réponse à cette question sur ce post, et la valeur passée de l'appli à la Popup, c'est le nom de l'image...
Regarde l'exemple.
kreposucre
CITATION(Fusion @ Aug 10 2007, 03:53 PM) *
http://flex.mediabox.fr/index.php?showtopi...;hl=createPopup

J'avais proposé une réponse à cette question sur ce post, et la valeur passée de l'appli à la Popup, c'est le nom de l'image...
Regarde l'exemple.

Salut, en effet je navigue entre ces deux pages pour essayer de résoudre mon problème :
Voici ce que j'aimerais faire :
je veux ouvrir un popup qui affiche une datagrid d'un conteneur de type arrayCollection.
J'ai construit mon component MXML de la façon suivante :


----------------------------------------PopupRCM.mxml--------------------------------
-------------------------------------------------------------------------------------
<?xml version="1.0"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" title="Aperçu" width="314" showCloseButton="true" close="PopUpManager.removePopUp(this)" height="308" borderColor="#408080" alpha="1.0" backgroundAlpha="1.0" layout="absolute">
<mx:Script>
<![CDATA[
import mx.managers.PopUpManager;
import mx.rpc.events.FaultEvent;
import mx.rpc.AsyncToken;
import mx.collections.ArrayCollection;


//------------ça c'est des essais infructueux LOL----
[Bindable]
public var source:ArrayCollection = new ArrayCollection();
public function setSource(source:ArrayCollection):void
{
this.source = source;
}

//-----------------------------------------------
]]>


</mx:Script>
//------------Voici ma DataGrid---------------------
<mx:DataGrid width="376" height="200" id="detailsRCM" textAlign="center" resizableColumns = "false" dataProvider="{this.source}">
<mx:columns>
<mx:DataGridColumn headerText="TOI" dataField="toi"/>
<mx:DataGridColumn width="400" headerText="URI" dataField="uri"/>
<mx:DataGridColumn headerText="Status" dataField="status" itemRenderer="renderer.StatusRenderer"/>
<mx:DataGridColumn headerText="Nb of request " dataField="relatedRequests"/>
<mx:DataGridColumn headerText="Nb of sent symbols" dataField="sentSymbols"/>
</mx:columns>
</mx:DataGrid>


</mx:TitleWindow>

--------------------------------------------------------
-------------------------------------------------------
Ensuite au niveau du parent je fais la chose suivante :


public function openWindow(typeObject:int,ofset:int):void
{
var titleWindow:TitleWindow = new TitleWindow();
titleWindow.width= 720;
titleWindow.height= 300;
switch(typeObject)
{
case 1:
// Set the TitleWindow container properties.
//myTitleWindow.addChild(PopupRCM.detailsRCM);
titleWindow = TitleWindow(PopUpManager.createPopUp( this,PopupRCM , true));
titleWindow.title = "Details in Repair Server Centric Mode";

//titleWindow.setSource(repairServerObject[ofset].detailsList);


J'aimerais tout simplement accéder de quelque manière qui soit à la variable source ou bien directement dans le data provider de la datagrid, au sein de mon popupRCM.
J'ai essayé : comme pour ton exemple avec ton image avec "detailsRCM.dataProvider="monOBjet" mais pas moyen d'accéder a details RCM ou bien source...
Je te remercie pour ton aide !



...
Fusion
Bon si j'ai bien compris, tu as des données dans un ArrayCollection dans ta page principale, et tu veux que dans la poup un DataGrid puisse prendre ces données et les afficher.
Et cette action de donner les données à ton DataGrid est faite depuis l'appli principale. J'ai bon icon_smile.gif ?

Si on considère que

Action Script

repairServerObject[ofset].detailsList);
est bien un dataProvider/une ArrayCollection, tu as tout bon.

Maintenant si tu ne t'en sors pas, vérifie que tes attributs sont bien initialisés : un dataProvider pas initialisé ça peut faire très mal.
Quand tu accèdes à titleWindow.source, vérifie que le ArrayCollection est bien initialisé.

Je vais tâcher de refaire un exemple.
Fusion
Et voilà, associer le dataProvider ne suffisait pas, donc, j'ai fait une boucle icon_mrgreen.gif

Appli principale :

MXML


<?xml version="1.0" encoding="utf-8"?>
<!-- Main application to demonstrate TitleWindow layout container. -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="start()">

<mx:Script>
<![CDATA[

import mx.managers.PopUpManager;
import mx.containers.TitleWindow;
import flash.geom.Point;
import mx.controls.Image;
import mx.collections.ArrayCollection;

private var point1:Point = new Point();
private var image:Image = new Image();
private var imageAMontrer:String;

private function start():void
{
imageAMontrer = "thumb_on.png";
image.source=imageAMontrer;
myTile.addChild(image);
}
private function showWindow():void {
var titleWindow:SimpleTitleWindowExample=SimpleTitleWindowExample(PopUpManager.creat
ePopUp( this, SimpleTitleWindowExample , true));


point1.x=myTile.x;
point1.y=myTile.y;
point1=myTile.localToGlobal(point1);
titleWindow.x=point1.x+25;
titleWindow.y=point1.y+25;

titleWindow.image.source=imageAMontrer;
for (var i:Number=0;i<dg.dataProvider.length;i++)
{
titleWindow.dg.dataProvider.addItem(dg.dataProvider.getItemAt(i));
}
}
]]>
</mx:Script>

<mx:Panel title="Exemple" height="75%" width="75%"
paddingTop="10" paddingLeft="10" paddingRight="10" paddingBottom="10">

<mx:Tile id="myTile"
click="showWindow();"/>

</mx:Panel>
<mx:XMLList id="employees">
<employee>
<name>Maurice Smith</name>
<phone>555-219-2012</phone>
<email>maurice@fictitious.com</email>
<active>false</active>
</employee>
<employee>
<name>Mary Jones</name>
<phone>555-219-2000</phone>
<email>mjones@fictitious.com</email>
<active>true</active>
</employee>
</mx:XMLList>

<mx:Panel title="DataGrid Control Example" height="100%" width="100%"
paddingTop="10" paddingLeft="10" paddingRight="10">

<mx:Label width="100%" color="blue"
text="Select a row in the DataGrid control."/>

<mx:DataGrid id="dg" width="100%" height="100%" rowCount="5" dataProvider="{employees}">
<mx:columns>
<mx:DataGridColumn dataField="name" headerText="Name"/>
<mx:DataGridColumn dataField="phone" headerText="Phone"/>
<mx:DataGridColumn dataField="email" headerText="Email"/>
</mx:columns>
</mx:DataGrid>

<mx:Form width="100%" height="100%">
<mx:FormItem label="Name">
<mx:Label text="{dg.selectedItem.name}"/>
</mx:FormItem>
<mx:FormItem label="Email">
<mx:Label text="{dg.selectedItem.email}"/>
</mx:FormItem>
<mx:FormItem label="Phone">
<mx:Label text="{dg.selectedItem.phone}"/>
</mx:FormItem>
</mx:Form>

</mx:Panel>
</mx:Application>


Popup :

MXML


<?xml version="1.0" encoding="utf-8"?>
<!-- Simple custom MXML TitleWindow component.
The TitleWindowApp application displays this component.
You cannot run it independently. -->

<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml"
title="Popup" x="168" y="86">

<mx:Script>
<![CDATA[
import mx.managers.PopUpManager;
import mx.controls.*;
import mx.collections.ArrayCollection;

[Bindable]
public var source:ArrayCollection = new ArrayCollection();


]]>
</mx:Script>


<mx:HBox>
<mx:Image id="image"/>
<mx:Button label="Fermer" click="PopUpManager.removePopUp(this);"/>
</mx:HBox>
<mx:DataGrid id="dg" width="100%" height="100%" rowCount="5" dataProvider="{this.source}">
<mx:columns>
<mx:DataGridColumn dataField="name" headerText="Name"/>
<mx:DataGridColumn dataField="phone" headerText="Phone"/>
<mx:DataGridColumn dataField="email" headerText="Email"/>
</mx:columns>
</mx:DataGrid>

<mx:Button id="b" click="Alert.show(source.length.toString());"/>

</mx:TitleWindow>
kreposucre
Je te remercie mille fois pour ta contribution rapide et efficace Fusion!
:-)
kreposucre
Bonjour, J'ai une derniere question :
Je dispose maintenant d'un tableau de type dataGrid, celui ci possède une scroll bar sur sa droite lorsqu'il y a beaucoup d'items.
Je cherche un moyen de jouer avec la position de l'item dans la fenetre de visionnage du tableau dans le but de pouvoir afficher dynamiquement la fenetre. J'ai réussi à récupérer la position du scroller que j'ai stocké qqe part.
Maintenant, existe t il une propriété de datagrid qui indique quel élément sera le premier de la fenetre de visualisation courante? ou tout simplement afficher des le début par exemple les éléments d'index 10 à 15 avec le curseur de scrolling au milieu.
J'ai en effet un pb car mon tableau est rafraichi dynamiquement grace à l'appel d'un XML , et mes objets mis à jour(de type arrayCollection) et ça toutes les 500ms, et à chaque rafraichissement, mon curseur de scrolling remonte au début ce qui est genant pour la visualisation.

merci!
kreposucre
En fait le truc est de savoir si FLEX est adapté au rafraichissement dynamique de tableaux pour une vue d'activité temps réel.
Par exemple, dans le cas de mon rafraichissement de table(toutes les 500ms), meme en ayant gardé les paramètres de scrolling et en les réaffectant à chaque update (en attente de l'évènement UPDATE_COMPLETE de la dataGrid, j'ai un laps de temps (d'un 10eme de seconde ou le scoller remonte tout en haut) puis se replace à la position voulue et ce toutes les 500ms.

Cela est dû au fait que l'on peut positionner le scoller à un endroit voulu (avec verticalScrollPosition) uniquement si le tableau a été chargé entièrement, donc apres un évènement du type UPDTAE_COMPLETE, le temps de l'update justement le scroller remonte à 0.
Y aurait t il une parade sur cela ou bien FLEX n'est pas adapté?
Merci
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.