Я загружаю данные из 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 не запускается после нажатия на ссылку...
Ответ 1 · рейтинг 2 · Thomas
Хорошо, я нашел ответ в этом блоге: 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 - моя текстовая область с импортированным текстовым потоком
Ответ 2 · рейтинг 1 · Martin
Может быть, это поможет. Я использую html-ссылку следующим образом:
<a id="link_1"> Click me </a>
HTML-файл хранится снаружи. Я импортирую html в TextFlow, используя importToFlow, и добавляю Listener во Flex, например:
myTextFlow.addEventListener(FlowElementMouseEvent.ROLL_OVER, showMe);
Чтобы получить свойство id ссылки, которую я использую:
event.flowElement.id
Ответ 3 · renan
только что узнал, как получить исходную строку:
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-код.
есть ли у вас какие-либо предложения о том, как это сделать?