FLEX: Как поймать событие 'href' - PullRequest
1 голос
/ 07 декабря 2010

Я загружаю данные из TextFlow в spark: TextArea.В TextFlow у меня есть элементы 'href'.Проблема заключается в адресе элементов ссылки.Некоторые из них выйдут за пределы страницы (эти я уйду, ничего не делая), другие перейдут на другие страницы моего сайта (те, которые я должен поймать и обработать в коде).

Я планировалловить событие «клик по ссылке», чтобы решить, что делать, но я не могу этого сделать.Я прочитал это, написав

<a href="event:page_adress"> 

, я мог бы поймать событие по ссылке: событие в старом mx: TextArea, но я не могу сделать это здесь.Я попытался вручную добавить:

addEventListener(TextEvent.Link, functionName)

, но это не работает.Когда я перехожу на перехват события MOUSE_CLICK, я перехватываю событие, но не могу разобрать его, чтобы получить нужный адрес.

У кого-нибудь есть идеи, как это сделать?Мне не нужно придерживаться TextArea, но компонент должен загружать содержимое формы TextFlow.

PS Я заметил, что когда я добавил event: page_adress в 'href', ссылка перестала работать (это означает, что она, вероятно, начала выдаватьсобытия), но я не могу поймать его ...

PS2 TextFlow импортируется из внешней базы данных с

TextFlowUtil.importFromXML

Я пытался использовать в элементе ссылки, нажмите событие, но это не работает:

<a click="myClickHandler(event)">

myClickHandler не запускается после нажатия на ссылку ...

Ответы [ 3 ]

2 голосов
/ 10 декабря 2010

ОК, я нашел ответ в этом блоге: http://flexdevtips.blogspot.com/2010/10/displaying-html-text-in-labels.html

В основном мне пришлось искать весь 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 - моя текстовая область с импортированным textFlow

1 голос
/ 11 декабря 2011

Может быть, это поможет. Я использую HTML-ссылку, как это:

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

HTML-файл хранится извне. Я импортирую HTML в TextFlow, используя importToFlow, и добавляю прослушиватель во Flex, например:

myTextFlow.addEventListener(FlowElementMouseEvent.ROLL_OVER, showMe);

Чтобы получить id-свойство ссылки, которую я использую:

event.flowElement.id
0 голосов
/ 21 декабря 2010

только что узнал, как получить оригинальную строку:

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 я можно получить только текст ссылки («Имя»), но не аргументы, которые я посылаю на HTML-код.

есть ли у вас какие-либо предложения о том, как сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...