为什么Flex AS3 TextArea Htmltext更改事件的格式

时间:2010-12-03 09:13:26

标签: flex actionscript-3 tags 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 个答案:

答案 0 :(得分:0)

当您为TextArea.htmlText属性设置值时,Flex会自动从CSS样式中插入与defaultTextFormat集对应的其他HTML标记。

为了解决这个问题,我将创建一个扩展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;
        }
    }
}