Почему Flex AS3 TextArea Htmltext меняет формат события

Это не дает мне спать, я добавил свое тестовое приложение здесь. Просто скопируйте и вставьте, чтобы проверить, что приложение добавляет хорошо отформатированный HTML-текст в текстовую область, нажимая "добавить", затем нажимая "идти", я беру этот HTML-текст в другую текстовую область и вижу, что текст изменил формат, в котором появляются теги. запутался.

Моя конечная цель состоит в том, чтобы переопределить HTML-текст в другой формат для другого интерфейса. Однако эта путаница меток вызывает у меня головную боль.

Любые решения, чтобы предотвратить или исправить это будет высоко ценится.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="init()"  xmlns:ns1="com.tree.*">
    <mx:Script>
    <![CDATA[
        private function init():void        {
            originalTA.text='<TEXTFORMAT LEADING="-2">'+ '<P ALIGN="JUSTIFY">'+ '<FONT SIZE="26" COLOR="#9B0000" LETTERSPACING="0" KERNING="0"> some text </FONT> '+ '<FONT SIZE="26" COLOR="#BEBEBE"> some text  </FONT> '+ '<FONT SIZE="26" COLOR="#9B0000" LETTERSPACING="0" KERNING="0"> some text </FONT>'+ '</P>'+ '</TEXTFORMAT>';
        }

        private function add():void {
            viewDTA.htmlText=originalTA.text;
        }

        private function go():void {
            htmlTA.text=viewDTA.htmlText;
        }
    ]]>
    </mx:Script>
    <mx:HBox width="100%" height="100%">
        <mx:Label text="input"/>
        <mx:TextArea id="originalTA" height="100%" width="100%"/>
        <mx:Button label="add" click="add()"/>
        <mx:Label text="view"/>
        <mx:TextArea id="viewDTA" height="100%" width="100%"/>
        <mx:Button label="go" click="go()"/>
    </mx:HBox>
    <mx:HBox width="100%" height="100%">
        <mx:Label text="html"/>
        <mx:TextArea id="htmlTA" height="100%" width="100%"/>
    </mx:HBox>
</mx:Application>

1 ответ

Решение

Когда вы устанавливаете значение на TextArea.htmlText свойство Flex автоматически вставляет дополнительную разметку HTML, соответствующую значению defaultTextFormat из стилей CSS.

Чтобы обойти это поведение, я бы создал новый компонент, который расширяет компонент TextArea и переопределяет set htmlText функция для хранения исходного текста в новой переменной с именем OriginalHTMLText Вы можете получить доступ позже, чтобы получить оригинальный текст HTML.

Попробуйте использовать это как отправную точку:

package
{
    import mx.controls.TextArea;

    public class HTMLStaticTextArea extends TextArea
    {
        public var OriginalHTMLText:String = "";

        public function HTMLStaticTextArea()
        {
            super();
        }

        override public function set htmlText(value:String):void
        {
            super.htmlText = value;
            OriginalHTMLText = value;
        }
    }
}
Другие вопросы по тегам