2

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

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);

知道为什么会发生这个问题吗?

4

2 回答 2

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 运行时,文本内容作为 <div> 标记的 innerHTML 添加,并且没有标准化的 API 来检索具有内容的标记的 DOM 结构的纯文本内容。您可以编写自己的函数来提取文本内容,或者使用现有框架中的 JavaScript 函数(如jQuery text() 函数)来为 DHTML 运行时实现相同的结果。

我猜原因是 Laszlo 从 OpenLaszlo 4.0 或 4.1 开始使用基于 Dojo 的富文本编辑器进行带有 HTML 格式的文本输入。

剥离标签时在运行时保持一致行为的最佳方法是在服务器端进行转换。如果您希望在多行文本中对空格进行一致的处理,则尤其需要这样做,因为浏览器处理空格的方式存在差异。之前在 Stackoverflow 上已经回答了如何最好地从 JavaScript 中的字符串中去除标签的问题,例如JavaScript:如何从字符串中去除 HTML 标签?

这是一个跨运行时示例,它在 DHTML 中与 Firefox、Chrome 一起工作,它应该与 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>
于 2012-09-04T15:57:52.190 回答
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>
于 2012-09-04T13:55:01.360 回答