Migration Open laszlo 5.0中适合此的替代品是什么

Migration Open laszlo 5.0中适合此的替代品是什么,migration,openlaszlo,lzx,Migration,Openlaszlo,Lzx,我想知道这条线的合适替代品是什么 this.__LZtextclip.text 我使用它来获取文本节点中存在的字符串。这在OpenLaszlo3.3中运行良好,但在4.9和5.0中会出现问题 我试着把它更新到 this.sprite.__LZtextclip.text 我得到一个错误: 79: Error: Access of possibly undefined property __LZtextclip through a reference with static type LzSpr

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

this.__LZtextclip.text
我使用它来获取文本节点中存在的字符串。这在OpenLaszlo3.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);

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

我找到了问题所在。问题是我必须声明一个变量,并且必须引用该变量的属性

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

Debug.write(“this.text”,this.sprite);
var mx=this.sprite;
Debug.write(“this.text”,mx.textfield.text);
gRead.setAttribute('text','HI');
gRead.getTextFrom();

如果您试图访问文本字段的文本内容,为什么不直接访问属性文本

您应该知道,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> 

HI

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

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

剥离标记时在运行时保持一致行为的最佳方法是在服务器端进行转换。如果您希望在多行文本中使用一致的空白处理,这一点尤其需要,因为浏览器处理空白的方式存在差异。在Stackoverflow上,如何在JavaScript中最好地从字符串中剥离标记的问题已经得到了回答

下面是一个跨运行时的示例,它在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>


“LZtextclip”是对SWF8运行时使用的普通Flash文本字段的引用。SWF9+和DHTML运行时具有不同的实现。如果可能的话,尽量避免调用LZX中标记为双下划线“”的私有属性。在上面的代码中,如果我将其更改为。gRead.setAttribute(“文本”。“你好,世界!

”);然后gRead.text将返回带有html标记的文本。但是通过使用uulztextclip,我将得到没有这些html标记的文本。这就是为什么我要用雪碧。是否有任何替代方案可以在任何地方使用?您是需要在两个运行时都使用该功能,还是仅在SWF中使用该功能?是的,我需要在两个环境中都使用该功能。我知道sorite的东西在as3中工作,所以我可以为此创建一个检查。但是在DHTML中,我不确定我是否想过使用JavaScript。laszlo本身有内置的东西吗?请记住,textContent属性在所有浏览器中都不可用。以下是有关textContent支持的更多信息
<P ALIGN="LEFT"><FONT FACE="Verdana" SIZE="11" COLOR="#000000" LETTERSPACING="0" KERNING="1">HI</FONT></P> 
<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>