FLEX: Как поймать событие «href»

Я загружаю данные из 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

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

<a click="myClickHandler(event)">

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


person Thomas    schedule 06.12.2010    source источник


Ответы (3)


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

По сути, мне пришлось искать весь текстовый поток, а в случае создания ссылки - добавлять к нему событие вручную.

Я публикую свой код на случай, если блог 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 - моя текстовая область с импортированным текстовым потоком

person Thomas    schedule 10.12.2010

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

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

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

myTextFlow.addEventListener(FlowElementMouseEvent.ROLL_OVER, showMe);

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

event.flowElement.id
person Martin    schedule 10.12.2011

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

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

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

person renan    schedule 21.12.2010