Aide - Recherche - Membres - Calendrier
Version complète : Importer une fonction dans un itemRenderer
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Flex
deuns
Ptetre pas trés explicite mon titre :/
Enfin avant tout Bonjour smile.gif

J'essaye en ce moment même les tileList, j'ai donc un fichier principal (affiche.mxml) qui créé une tileListe:
CODE
var newTileList:TileList;

Puis je customise les items de cette tileList via un autre fichier renderer
CODE
newTileList.itemRenderer = new ClassFactory(affiche_renderer);


Jusque là c'est bon ça fonctionne ^^ Là où pour moi ça se complique un peu c'est que je n'ai bien sûr pas qu'un seul élément dans cette liste, et que je voudrais pouvoir cliquer sur ces éléments...

Voici mon fichier affiche_renderer.mxml (utilisé dans la liste précédente):
CODE
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="142" height="150">
    <mx:Image x="0" y="0" source="{data.adresse}" toolTip="{data.titre}" click="@OuvreURL(data.liens)" />
</mx:Canvas>


Ce que j'essaye de faire c'est d'appeler une fonction (OuvreURL(chaine:string))définie dans le fichier principal, mais je n'arrive pas à la rapatrier correctement :/ J'obtiens l'erreur suivante "Les attributs ne peuvent pas être appelés." pour la ligne
CODE
<mx:Image x="0" y="0" source="{data.adresse}" toolTip="{data.titre}" click="@OuvreURL(data.liens)" />


Comme d'habitude pas moyen de trouver quoi que ce soit à ce sujet (je ne dis pas qu'il n'y a rien, mais ça doit être sacrément bien planqué...)

Enfin voilà si quelqu'un sait comment faire ça, ça m'arrangerait énormément smile.gif

Merci par avance wink.gif
Fusion
CITATION(deuns @ Jul 4 2007, 09:34 AM) *
CODE
click="@OuvreURL(data.liens)"


Je ne comprends pas ici, pourquoi tu mets un '@' ?
Tonic
Salut, pas besoin de mettre l'évènement click sur ton item.

Utilise plutôt l'évènement Event.CHANGE sur ta tileList.

Ensuite, tu peux récupérer l'itemrenderer sur lequel tu as cliqué via monEvent.target.

Et vu où tu récupères cet évènement, tu devrais avoir directement accès à ta fonction "OuvreURL".
deuns
Bon, de nombreux essais et rien de concluant (je commence a pas du tout aimer... :/).

Je vous ai donné toute ma fonction qui est sensée créer ce dont je vous parlais avant. J'ai changé comme vous me l'avez dit ce qui détecterait le clic, du coup hop sur la tileList...

Le soucis est que je n'arrive pas à récupérer les valeurs de l'item :/ Alors soit je me suis extra planté, soit j'ai rien compris au fonctionnement... Dans tous les cas le fait est là !

J'ai quand même essayé de modifier l'écouteur avec un EventList.ITEM.CLICK au lieu de Event.CHANGE qui n'apparaissait pas dans l'autocomplétion o_O

Dans le trace de ma fonction j'ai essayé ces différentes valeurs (event.currentTarget et event.target qui me renvoient toujours la même chose: "affiches0.Grid4.GridRow8.GridItem9.ViewStack_cible.Canvas25.TileList26" quelque soit l'item sur lequel je clique) et aussi (event.currentTarget.source event.currentTarget.adresse event.currentTarget.liens... qui me renvoient NULL) :/

CODE
private function RemplitArray(event:ResultEvent):void {
    arrayfilms = event.result.liste.affiche;
    var nb_items:int = arrayfilms.length;
    //Determinons le nombre de ViewStacks nécessaires...
    var nb_viewstacks:Number = (nb_items/6);
    var nb_viewstacks_arrondi:int = (nb_items/6);
    if (nb_viewstacks > nb_viewstacks_arrondi) {
        nb_viewstacks = (nb_viewstacks_arrondi+1);
    }
    if (nb_viewstacks == 1) {
        img_next.visible = false;
    }
    
    //Préparation à la création des sous-ArrayCollections
    var Curseur:IViewCursor = arrayfilms.createCursor();
    var Objet_Courant:Object = Curseur.current;
    var Objet_CourantTL:Object;
    //Boucle de création des éléments visuels
    var i:int = 0;
for (i = 0; i < nb_viewstacks; i++) {
        var arrayTL:ArrayCollection = new ArrayCollection;
        Objet_Courant = arrayfilms.getItemAt(i*6);
        //prends X items (X = 6, sauf si on atteint la fin de l'ArrayCollection
        var limite:int = (nb_items-(arrayfilms.getItemIndex(Objet_Courant)));
        if (limite > 6 ) {
            limite = 6;
        }
        for (var n:int = 0; n < limite; n++) {
            Objet_Courant = Curseur.current;
            Objet_CourantTL = new Object();
            Objet_CourantTL.adresse = (Objet_Courant.adresse) as String;
            Objet_CourantTL.titre = (Objet_Courant.titre) as String;
            Objet_CourantTL.liens = urlRoot+(Objet_Courant.liens) as String;
            arrayTL.addItem(Objet_CourantTL);
            Curseur.moveNext();
        }
    
        //Création de chaque Canvas
          var canvas_cible:Canvas = new Canvas;
         canvas_cible.id = "CN_"+i;
          canvas_cible.width = 435;
          canvas_cible.height = 310;
          ViewStack_cible.addChild(canvas_cible);
            
          //Création de chaque TileList
          var newTileList:TileList;
          newTileList = new TileList;
          newTileList.id = "TL_"+i;
          newTileList.width = 435;
          newTileList.height = 310;
        newTileList.horizontalScrollPolicy ='off';
        newTileList.verticalScrollPolicy ='off';
        newTileList.styleName = 'TLstyle';
          newTileList.dataProvider = arrayTL;
          newTileList.itemRenderer = new ClassFactory(affiche_renderer);
                //Ici appel de la fonction OuvreURL
          newTileList.addEventListener(Event.CHANGE, OuvreURL);
          canvas_cible.addChild(newTileList);          
    }
    //Fin de boucle de création des éléments visuels
    ViewStack_cible.selectedChild = ViewStack_cible.getChildAt(0) as Container;
}    

private function OuvreURL(event:Event):void{
    trace(event.currentTarget);
}


Merci pour le coup de main wink.gif
Fusion
Tu obtiens toujours la TileList quand tu regardes event.currentTarget... mais tu as la propriété selectedItem qui peut te donner les infos sur l'élément sélectionné dans ta TileList. C'est ce que tu veux, non? icon_wink.gif

Tu as aussi selectedItems en cas de sélection multiple !
Tonic
Oui, target doit te renvoyer surement ta tileList. Mais ensuite, avec ta tileList, tu peux savoir sur quel item tu as clické : "event.currentTarget.selectedItem"
deuns
Une dernière question où avez vous réussi à récupérer ces infos... Quand je regarde dans la doc je n'arrive pas m'en sortir icon_neutral.gif
J'ai pas encore essayé mais c'est sûrement ça smile.gif

Parfait ça fonctionne icon_mrgreen.gif

.THX.
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.