FLEX:如何捕获'a href'事件

时间:2010-12-06 22:50:54

标签: flex events hyperlink

我正在从TextFlow加载数据到spark:TextArea。在TextFlow中,我有'a href'元素。问题在于“链接”元素的地址。其中一些将出现在页面之外(这些我将离开而不做任何事情),其他将转到我的网站中的其他子页面(这些我必须捕获并处理代码)。

我计划抓住'点击链接'事件来决定做什么,但我不能这样做。我通过写

来阅读
<a href="event:page_adress"> 

我可以在链接上捕获事件:旧mx中的事件:TextArea,但我不能在这里做到这一点。我试图手动添加:

addEventListener(TextEvent.Link, functionName)

但它不起作用。 当我更改为捕获MOUSE_CLICK事件时,我正在捕获该事件,但无法解析它以获取所需的地址。

有人知道怎么做吗?我不必坚持使用TextArea,但组件必须从TextFlow下载内容。

PS我注意到当我添加event:page_adress到'a href'时,链接停止工作(这意味着它可能开始抛出事件),但是我无法抓住它......

使用

从外部数据库导入PS2 TextFlow
TextFlowUtil.importFromXML

我尝试在link元素中使用,点击事件但它不起作用:

<a click="myClickHandler(event)">
单击链接后,

myClickHandler没有运行...

3 个答案:

答案 0 :(得分:2)

好的,我在这个博客上找到答案:http://flexdevtips.blogspot.com/2010/10/displaying-html-text-in-labels.html

Bassicly我必须搜索整个textFlow并且在创建链接的情况下 - 手动添加事件。

我发布我的代码,以防Flexdevtips博客将来可能会失败:

/**
* 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);
    }

  }

我不得不在我的代码中使用它:

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);
}

其中tt是我的textarea,带有导入的textFlow

答案 1 :(得分:1)

也许这有帮助。我使用像这样的html链接:

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

html文件存储在外部。我使用importToFlow将html导入TextFlow并在Flex中添加Listener,如下所示:

myTextFlow.addEventListener(FlowElementMouseEvent.ROLL_OVER, showMe);

要获取我使用的链接的id-property:

event.flowElement.id

答案 2 :(得分:0)

刚刚找到了如何获取原始字符串:

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

这将返回标记的内容,因此您可以解析以获取参数

  谢谢你的帖子,它帮助了我   许多。至少我更进了一步,   我实际上可以听听这些事件。

     

但我仍有问题,HTML   我在RichEditableText上设置的代码   看起来像这样:

<a href='event:n," + id + "'>Name</a>
     在Flex3上我可以使用   TextEvent.LINK获取参数   它的'text'属性,然后解析得到   我需要的身份证数据。但现在   我们正在开发Flex4我不能   弄清楚如何做到这一点。后   捕获FlowElementMouseEvent i   只能获取链接文本('名称'),   但不是我发送的论据   HTML代码。

     

你有什么建议吗?   这样做?