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 に答える