我想知道这条线的合适替代品是什么。
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);
知道为什么会出现这个问题?
答案 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运行时的相同结果。
我想原因是,自OpenLaszlo 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>