0

在一个 flex 应用程序中,我想在 spark textarea 中显示格式化的推文,但它显示 html 元素(带有标签)“原样”而不是解析它并转换为富 html 文本,我从 flex 官方网站关注这个例子

<s:TextArea width="400" height="100">
    <s:content>This is <s:span color="#FF0000">HTML text</s:span>
        in an <s:span fontWeight="bold">Spark TextArea control</s:span>.
        Use the <s:span textDecoration="underline">content</s:span> property
        of the <s:span color="#008800">Spark TextArea control</s:span> 
        to include basic HTML markup in your text, including
        <s:a href="http://www.adobe.com" target="_blank">links</s:a>.
    </s:content>
</s:TextArea>

但是像这样传递我的数据

<s:TextArea>
    <s:content>{TwitterString.parseTweet(data.text)}</s:content>
</s:TextArea>

一条推文的结果是,

<s:a href='http://t.co/a7bQnmLRGy' target='_blank'>http://t.co/a7bQnmLRGy</s:a> I'll be there

这意味着它没有按预期格式化。

知道如何让<s:content>动态内容的工作传递给它吗?

请不要回答TextConverter这将是我最后的手段,我很乐意使用<s:content>工作

4

1 回答 1

0

查看TextArea's content属性的文档。特别是,它说明了该content属性:

此属性类型为 Object,因为您可以将其设置为字符串、FlowElement 或字符串和 FlowElement 的数组。在上面的示例中,内容是一个 2 元素数组。第一个数组元素是字符串“Hello”。第二个数组元素是一个 SpanElement 对象,其文本“World”以粗体显示。

所以这里的关键是你的TwitterString.parseTweet()函数返回一个String. 因此,将TextArea其显示为 aString而无需转换文本中的元素。

相反,如果您希望继续沿着这条路走下去,您的TwitterString.parseTweet()函数应该返回一个Array. 数组中的每个元素要么是 a String(代表普通文本),要么是某种FlowElement对象(a SpanElementLinkElementParagraphElement等)。如果您返回一个包含所需结构的数组,它将正确呈现您的内容。下面是一个简单的例子,对于真实的内容来说它会变得非常乏味。

所以你真的最好使用TextConverter... 因为通过编写你想要的代码,你正在做同样的事情TextConverter

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:local="*">

    <fx:Script>
        <![CDATA[
            import flashx.textLayout.elements.LinkElement;
            import flashx.textLayout.elements.SpanElement;

            [Bindable("contentChanged")]
            private function getTheContent():Array
            {
                var temp:Array = [];
                var link:LinkElement = new LinkElement();
                link.href = "http://google.com";
                var span:SpanElement = new SpanElement();
                span.text = "Google";
                link.addChild(span);
                temp.push(link);
                // continue building your structure...(so tedious)
                return temp;
            }
        ]]>
    </fx:Script>

    <s:TextArea width="400" height="100">
        <s:content>{getTheContent()}</s:content>
    </s:TextArea>
</s:Application>
于 2013-07-14T00:24:19.633 回答