2010-12-06 3 views
1

Je charge des données de TextFlow à spark: TextArea. Dans TextFlow, j'ai des éléments 'a href'. Le problème réside dans l'adresse des éléments 'link'. Certains d'entre eux iront en dehors de la page (ceux-ci je partirai sans rien faire), d'autres iront à d'autres sous-pages de mon site (celles-ci je dois attraper et traiter dans le code).FLEX: Comment attraper un événement 'href'

J'ai prévu d'attraper l'événement 'cliquant sur le lien' pour décider quoi faire, mais je ne peux pas le faire. J'ai lu que par écrit

<a href="event:page_adress"> 

je pourrais attraper l'événement sur le lien: événement dans le vieux mx: TextArea, mais je ne peux pas faire ça ici. J'ai essayé d'ajouter manuellement:

addEventListener(TextEvent.Link, functionName) 

mais cela ne fonctionne pas. Lorsque je passe à l'événement MOUSE_CLICK, j'attrape l'événement, mais je ne peux pas l'analyser pour obtenir l'adresse requise.

Quelqu'un a une idée de comment le faire? Je n'ai pas à coller avec TextArea, mais les composants doivent télécharger le contenu de TextFlow.

PS Je remarque que quand je événement ajouté: page_adress au « a href » le lien ne fonctionne plus (cela signifie qu'il a probablement commencé lancers), mais je ne peux pas l'attraper ...

PS2 TextFlow est importé base de données externe avec

TextFlowUtil.importFromXML 

i essayé d'utiliser dans l'élément de lien, cliquez sur l'événement, mais cela ne fonctionne pas:

<a click="myClickHandler(event)"> 

myClickHandler doesnt courir après avoir cliqué sur le lin k ...

Répondre

2

OK j'ai trouvé réponse sur ce blog: http://flexdevtips.blogspot.com/2010/10/displaying-html-text-in-labels.html

Bassicly je devais rechercher toute textFlow et en cas de fonder un lien - ajout manuel d'événement à elle.

Im affichant mon code dans le cas où le blog flexdevtips pourrait être dans l'avenir:

/** 
* Finds the first LinkElement recursively and returns it. 
*/   

private function findLinkElement(group:FlowGroupElement):void 
{ 
    var childGroups:Array = []; 
    // First check all the child elements of the current group, 
    // Also save any children that are FlowGroupElement 
    for (var i:int = 0; i < group.numChildren; i++) { 
     var element:FlowElement = group.getChildAt(i); 
     if (element is LinkElement) 
     { 
      linksArray.push(element as LinkElement); 
     } else if (element is FlowGroupElement) 
     { 
      childGroups.push(element); 
     } 
    } 
    // Recursively check the child FlowGroupElements now 
    for (i = 0; i < childGroups.length; i++) { 
     var childGroup:FlowGroupElement = childGroups[i]; 
     findLinkElement(childGroup); 
    } 

    } 

et j'ai dû l'utiliser dans mon code comme ceci:

linksArray = []; 

findLinkElement(tt.textFlow); 

var iter:int=0; 
for (iter = 0 ; iter<linksArray.length ; iter++) 
{ 
       linksArray[iter].addEventListener(FlowElementMouseEvent.MOUSE_DOWN,linkSelect, false, 0, true); 
} 

où tt est mon textarea avec textFlow importé

0

vient de découvrir comment obtenir la chaîne d'origine:

function onClick(event:FlowElementMouseEvent):void 
{ 
    var link:LinkElement = event.flowElement as LinkElement; 
    var text:String = link.href; 
} 

ce renverront le contenu de la balise, de sorte que vous pouvez analyser pour obtenir vos paramètres

merci pour le poste, il m'a beaucoup aidé . Au moins, j'ai un peu plus loin, je peux réellement écouter les événements.

mais j'ai encore un problème, le code HTML j'ai mis sur mon RichEditableText ressemble à ceci:

<a href='event:n," + id + "'>Name</a> 

sur Flex3 je pouvais utiliser le TextEvent.LINK obtenir les arguments par son « texte 'propriété, puis analyser pour obtenir les données d'identification dont j'ai besoin. mais maintenant que nous développons en Flex4 je ne peux pas comprendre comment faire cela. après attraper le FlowElementMouseEvent i peut seulement obtenir le texte du lien («Nom»), mais pas les arguments im l'envoi sur le code HTML. Avez-vous des suggestions sur ?

1

Peut-être que cela aide. J'utilise un lien html comme ceci:

<a id="link_1"> Click me </a> 

Le fichier html est stocké en externe. J'importer le code HTML à un TextFlow en utilisant importToFlow et ajoutez le Listener dans Flex, comme ceci:

myTextFlow.addEventListener(FlowElementMouseEvent.ROLL_OVER, showMe); 

Pour obtenir l'ID-propriété du lien que j'utilise:

event.flowElement.id 
Questions connexes