0

我的 Flex/AS3 Web 应用程序访问数据库并检索包含 \n 作为换行符的文本。否则文本看起来像普通文本。

有没有办法将 \n 转换为可以插入到 spark TextFlow 中的段落标签?

例如,我对 TLF 的唯一经验是编写 mxml 代码,如下所示:

<s:RichEditableText width="100%" height="100%"
                    textAlign="left" paddingTop="0"
                    paragraphSpaceAfter="0.3"
                    editable="false">
<s:textFlow>
  <s:TextFlow>
    <s:p fontWeight="bold" fontSize="15">My Title Text</s:p>
    <s:p fontSize="2"/>
    <s:p>{paragraph1_text}</s:p>
    <s:p>{paragraph2_text}</s:p>
    <s:p>{paragraph3_text}</s:p>
    <s:p fontSize="2"/>
  </s:TextFlow>
</s:textFlow>
</s:RichEditableText>

假设我从数据库中检索一个字符串,例如:

paragraph1_text = "This is some text.\nThis is some more text.\nThis is even more text."

即使将其插入到上面的代码中会识别换行符,但它不会识别paragraphSpaceAfter="0.3". 我的目标是产生以下效果:

<s:RichEditableText width="100%" height="100%"
                    textAlign="left" paddingTop="0"
                    paragraphSpaceAfter="0.3"
                    editable="false">
<s:textFlow>
  <s:TextFlow>
    <s:p fontWeight="bold" fontSize="15">My Title Text</s:p>
    <s:p fontSize="2"/>
    <s:p>This is some text.</s:p>
    <s:p>This is some more text.</s:p>
    <s:p>This is even more text.</s:p>
    <s:p>{paragraph2_text}</s:p>
    <s:p>{paragraph3_text}</s:p>
  <s:p fontSize="2"/>
</s:TextFlow>

有没有办法以编程方式实现这样的事情(数据库文本可以是任何东西)?

我尝试将paragraph1_text 更改为:

paragraph1_text="<s:p>This is some text.</s:p><s:p>This is some more text.</s:p><s:p>This is even more text.</s:p>"

然后在上面的第一个代码块中使用它,但它只是打印出所有的<s:p></s:p>标签。

任何建议表示赞赏。

4

1 回答 1

2

您可以使用 ActionScript 实现此目的。假设您将 TextFlow 命名为

<s:TextFlow id="myFlow">

您的 ActionScript 代码块可能如下所示:

import flashx.textLayout.elements.*;

public function insertParagraph( textFlow:TextFlow, text:String, locationIndex:uint ):void
{
    var paragraphs:Vector.<ParagraphElement> = getParagraphElements( text );
    for ( var i:uint = 0; i < paragraphs.length; i++ )
    {
        textFlow.addChildAt( paragraphs[i], locationIndex + i );
    }
}

public function getParagraphElements( text:String ):Vector.<ParagraphElement>
{
    var textParagraphs:Array = text.split("\n");
    var result:Vector.<ParagraphElement> = new Vector.<ParagraphElement>();
    for ( var i:uint = 0; i < textParagraphs.length; i++ )
    {
        var p:ParagraphElement = new ParagraphElement();
        var span:SpanElement = new SpanElement();
        span.text = textParagraphs[i];
        p.addChild(span);
        result.push(p);
    }

    return result;
}

在您的情况下,由于您要添加从第 3 个元素开始的段落,一旦检索到文本,您可以调用 insertParagaph(myFlow, text, 2);

于 2012-07-13T17:56:03.680 回答