Flex TextFlowUtil.importFromString在某些情况下忽略空格。这是一个错误吗?

时间:2011-02-17 09:49:46

标签: flex

在以下完整功能的Flex应用程序中,在将输入文本导入TextFlow时,应保留两个链接之间的换行符:

<?xml version="1.0" encoding="utf-8"?>
<s:Application         xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:mx="library://ns.adobe.com/flex/mx"
               xmlns:s="library://ns.adobe.com/flex/spark"
               minWidth="955" minHeight="600"
               creationComplete="application1_creationCompleteHandler(event)"
               >
    <fx:Script>
        <![CDATA[
            import flashx.textLayout.formats.WhiteSpaceCollapse;
            import mx.events.FlexEvent;
            import spark.utils.TextFlowUtil;

            protected function application1_creationCompleteHandler(event : FlexEvent) : void
            {
                input.text = "<a href='#'>link1</a>\n<a href='#'>link2</a>";
            }

            protected function button1_clickHandler(event : MouseEvent) : void
            {
                output.textFlow = TextFlowUtil.importFromString(input.text, WhiteSpaceCollapse.PRESERVE);
            }
        ]]>
    </fx:Script>
    <s:RichEditableText text=""
                        id="input"
                        width="266" height="215"
                        x="10" y="30"
                        />
    <s:Label text="Input"
             x="10" y="10"
             />
    <s:Label text="Output"
             x="8" y="286"
             />
    <s:Button x="10" y="253"
              click="button1_clickHandler(event)"
              label="Import"
              />
    <s:RichEditableText id="output"
                        width="399" height="212"
                        x="10" y="306"
                        />
</s:Application>

但是,如果单击“导入”,您将看到在同一行中创建的两个链接(没有中断)。

如果在源文本中的链接之间添加任何非空白字符,则会更改。这意味着,如果您只是在链接之间添加“*”,则会保留换行符。

是什么给出的?这是一个Flex错误吗?

2 个答案:

答案 0 :(得分:0)

您可能需要调整全局XML解析设置。这些可以作为XML类的静态属性访问。我的预感是解析时XML.ignoreWhitespacetrue。请尝试以下方法:

XML.ignoreWhitespace = false;
output.textFlow = TextFlowUtil.importFromString(input.text, WhiteSpaceCollapse.PRESERVE);

答案 1 :(得分:0)

这是解决此错误的方法,无需更改任何XML设置,简单且有效:

导出TextFlow

var richTextXML:xml = new XML("<"+"richTextXML"+"/>");    
richTextXML.appendChild(getCdataXMl());

private function getCdataXMl():xml {
    var textFlowStr:String = TextConverter.export(textFlow,TextConverter.TEXT_FIELD_HTML_FORMAT, ConversionType.STRING_TYPE).toString();
    var textFlowXMl:xml = new XMl("<![CDATA["+textFlowStr+"]]>");
    return textFlowXMl;
}

从XML导入TextFlow

var htmlTextInStr:String = richTextXMl.text();
var importtedTextFlow:TextFlow = TextConverter.importToFlow(htmlTextInStr,TextConverter.TEXT_FIELD_HTML_FORMAT);
textArea.textFlow = importtedTextFlow;