在Open laszlo 5.0中,这个.__ LZtextclip.text的合适替代品是什么

时间:2012-09-04 12:56:37

标签: migration openlaszlo lzx

我想知道这条线的合适替代品是什么。

this.__LZtextclip.text

我使用它来获取文本节点中的字符串。这在Openlaszlo 3.3中运行良好,但在4.9和5.0中它会产生问题

我尝试将其更新为

this.sprite.__LZtextclip.text

我收到了一个错误:

79: Error: Access of possibly undefined property __LZtextclip through a reference with static type LzSprite, in line: Debug.write(this.sprite.__LZtextclip.text);

知道为什么会出现这个问题?

2 个答案:

答案 0 :(得分:2)

如果您尝试访问文本字段的文本内容,为什么不只是访问属性 text

<canvas> 

    <text name="sample" id="gRead" />

    <handler name="oninit">
      gRead.setAttribute('text',"HI");
      Debug.info(gRead.text);
    </handler>

</canvas>

在OpenLaszlo 3.3中有方法getText(),它为您提供相同的值。在代码中访问mx.textfield不适用于DHTML运行时。

编辑:添加了有关剥离HTML标记的信息
Flash Textfield类flash.text.Textfield提供了一个API,用于在Textfield实例中启用HTML标记内容。有两种不同的属性,一种称为text,另一种称为htmlText。如果要直接访问lz.text实例的Flash Textfield对象,则它是lz.text实例的显示对象的属性:

// Flash Textfield instance
gRead.getDisplayObject().textfield
// Pure text content
gRead.getDisplayObject().textfield.text
// Formatted text
gRead.getDisplayObject().textfield.htmlText

您应该知道Flash会自动将HTML格式添加到您设置为内容的任何文本字符串中。当你这样做

gRead.setAttribute('text',"HI");

textfield.htmlText值为

<P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#000000" LETTERSPACING="0" KERNING="1">HI</FONT></P> 

对于DHTML运行时,文本内容被添加为&lt; div&gt;的innerHTML。标签,并没有标准化的API来检索带有内容的标签的DOM结构的纯文本内容。您可以编写自己的函数来提取文本内容,或者使用现有框架中的JavaScript函数(如jQuery text() function)来实现DHTML运行时的相同结果。

我想原因是,自Ope​​nLaszlo 4.0或4.1以来,Laszlo开始使用基于Dojo的富文本编辑器进行HTML格式化输入。

在剥离标记时,跨运行时具有一致行为的最佳方法是在服务器端进行转换。如果你想在多行文本中保持一致的空白处理,那就特别需要,因为浏览器如何处理空格有所不同。关于如何最好地从JavaScript中的字符串中剥离标记的问题之前已在Stackoverflow上得到解答,例如JavaScript: How to strip HTML tags from string?

这是一个跨运行时的示例,可以在Firefox,Chrome中使用DHTML,它应该适用于IE9 +:

<canvas> 

    <text name="sample" id="gRead" />

    <handler name="oninit"><![CDATA[
      gRead.setAttribute("text", 'Hello <b>World</b> <a href="http://www.openlaszlo.org">OL</a>');
      Debug.info("gRead.text=" + gRead.text);
      if ($dhtml) {
        Debug.info(gRead.getDisplayObject().textContent);
      } else {
        Debug.info(gRead.getDisplayObject().textfield.text);
      }
    ]]></handler>

</canvas>

答案 1 :(得分:1)

我发现了什么问题。问题是我必须声明一个变量,并且必须从中引用该属性。

<canvas> 
<library>
    <text name="sample" id="gRead">         
        <method name="getTextFrom">
            Debug.write("this.text" , this.sprite);
            var mx = this.sprite;           
            Debug.write("this.text" , mx.textfield.text);

        </method>
    </text>

</library>
<handler name="oninit">
    gRead.setAttribute('text',"HI");
    gRead.getTextFrom();

</handler>
</canvas>