Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.02.2011, 20:43
Хемуль вне форума Посмотреть профиль Отправить личное сообщение для Хемуль Найти все сообщения от Хемуль
  № 1  
Ответить с цитированием
Хемуль
Квач
 
Аватар для Хемуль

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
По умолчанию Ссылки в Spark TextArea: не отрабатываются клики

Всем привет.
В Spark TextArea-поле добавляю ссылку посредством преобразования TLF-разметки в textFlow. В href-атрибуте ссылки стоит абсолютный URL. Ссылка добавляется, выделена синим цветом и подчёркиванием. Но вот беда, клик не отрабатывается. В интернетах пишут, что клики отрабатываются в том случае, если поставить editable="false", но печаль в том, что не помогает. Попробовал поиграться с текстовым полем по-разному:
  • Поставил editable="false".
    Текст в поле, как и должно быть, перестал быть редактируемым, но ссылка клики не отрабатывает и курсор на руку при наведении не меняется.
  • Поставил editable="true".
    Текст в поле стал редактируемым, ссылка просто так клики не отрабатывает, но, с нажатым CTRL изменяет курсор на руку и переходит, куда надо. В этом случае, вроде, всё правильно.
  • На всякий случай попробовал в MXML-файле скина поставить editable="false" для RichEditableText'а, который содержит контент - эффект такой же, как в первом случае, то есть, поле не редактируется, но ссылка не кликабельна.
Может там есть ещё какой-то фокус, о котором я не знаю? Может editable="false" не хватает?

Добавлено через 26 часов 5 минут
Натолкнулся в этой связи на проблему, сути которой не понимаю. Заключается она в том, что дочерние элементы одного TextFlow, будучи скопированными в другой TextFlow, теряют кликабельность. Ниже исходник примера. Может коряво ссылку вставляю, но суть не в этом. Главное, что если бы я просто присвоил textFlow моей TextArea полученный newTextFlow, то ссылка бы работала, а вот в результате deepCopy элементов будто что-то теряется. Может кто-то поможет понять, что и где я потерял?
Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx"
			   creationComplete="application_creationCompleteHandler(event)">
	<fx:Script>
		<![CDATA[
			import flashx.textLayout.conversion.ConversionType;
			import flashx.textLayout.conversion.TextConverter;
			import flashx.textLayout.elements.TextFlow;
 
			import mx.events.FlexEvent;
 
			private function application_creationCompleteHandler(event:FlexEvent):void
			{
				// Получаем исходную разметку
				var TLFMarkup:String = TextConverter.export(textArea.textFlow, TextConverter.TEXT_LAYOUT_FORMAT, ConversionType.STRING_TYPE) as String;
 
				// Заменяем в исходной разметке "Hello" на ссылку
				var pattern:RegExp = /Hello/gi;
				var newTLFMarkup:String = TLFMarkup.replace(pattern, '</span><a href="http://flasher.ru" target="_blank">$&</a><span>');
 
				// Создаём новый TextFlow с новой разметкой и копируем его детей в исходный TextFlow поля ввода
				var newTextFlow:TextFlow = TextConverter.importToFlow(newTLFMarkup, TextConverter.TEXT_LAYOUT_FORMAT);
				for (var i:uint = 0; i < newTextFlow.numChildren; i++)
				{
					textArea.textFlow.addChild(newTextFlow.getChildAt(i).deepCopy());
				}
				textArea.textFlow.flowComposer.updateAllControllers();
			}
		]]>
	</fx:Script>
	<s:TextArea id="textArea" text="Hello, World!" editable="false" />
</s:Application>
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого


Последний раз редактировалось Хемуль; 22.02.2011 в 22:51.
Старый 23.02.2011, 13:08
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
В данном случае можно сделать такой финт ушами:
Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx"
               creationComplete="application_creationCompleteHandler(event)">
    <fx:Script>
        <![CDATA[
            import flashx.textLayout.conversion.ConversionType;
            import flashx.textLayout.conversion.TextConverter;
 
            import mx.events.FlexEvent;
 
            private function application_creationCompleteHandler(event:FlexEvent):void
            {
                // Получаем исходную разметку
                var TLFMarkup:String = TextConverter.export(textArea.textFlow, TextConverter.TEXT_FIELD_HTML_FORMAT, ConversionType.STRING_TYPE) as String;
 
                // Заменяем в исходной разметке "Hello" на ссылку
                var pattern:RegExp = /Hello/gi;
                var newTLFMarkup:String = TLFMarkup.replace(pattern, '</span><a href="http://flasher.ru" target="_blank">$&</a><span>');
 
                TLFMarkup += newTLFMarkup;
 
                textArea.textFlow = TextConverter.importToFlow(TLFMarkup, TextConverter.TEXT_FIELD_HTML_FORMAT);
            }
        ]]>
    </fx:Script>
    <s:TextArea id="textArea" text="Hello, World!" editable="false" />
</s:Application>
Добавлено через 22 минуты
Необновляемые ссылки это вроде как баг в TLF 1.1. Где-то попадалось, что в 2.0 починили.

Старый 23.02.2011, 13:58
Хемуль вне форума Посмотреть профиль Отправить личное сообщение для Хемуль Найти все сообщения от Хемуль
  № 3  
Ответить с цитированием
Хемуль
Квач
 
Аватар для Хемуль

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
Спасибо. ^_^
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:08.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 22:08.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.