2013-07-07 36 views
0

在一个Flex应用程序中,我想显示格式化的鸣叫在火花textarea,但它显示的HTML元素(与标签)“,因为它”而不是解析它,并转换成丰富的HTML文字,我是从以下柔性官方网站HTML动态内容不显示在火花文本区

<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>工作

回答

0

检查出TextAreacontent属性的文档。特别是,它指出这对content属性:

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

所以这里的关键是你的TwitterString.parseTweet()函数返回String。因此,TextArea将其显示为String,并且不会打扰转换文本中找到的元素。

相反,如果您希望继续沿着这条路径行进,您的TwitterString.parseTweet()函数应返回Array。阵列中的每个元素可以是String(代表正常文本)或某种FlowElement对象(SpanElement,LinkElement,ParagraphElement等)。如果您返回包含所需结构的数组,它将正确呈现您的内容。下面看一个简单的例子,对于真实的内容它会变得非常乏味。

所以,你真的关闭使用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>