如何在openlaszlo中整合textarea?

时间:2012-10-29 13:16:32

标签: openlaszlo lzx

我只是想在dhtml环​​境中集成textarea。我能够看到文本区域但是我无法在文本区域中输入任何内容。附件是一段代码片段。

<canvas debug="true">
 <attribute name="htmlsnippet" type="string" value="" />

    <handler name="oninit" args="e">
    <![CDATA[
        canvas.htmlsnippet = '<textarea id="textArea" rows="8" cols="50"></textarea>';
    ]]>
    </handler>

    <simplelayout axis="y" spacing="30" />

    <text id="textcont" width="530" height="350" bgcolor="#cccccc" />

    <button text="modify text" onclick="textcont.sprite.setText(canvas.htmlsnippet)" />
</canvas>

1 个答案:

答案 0 :(得分:2)

虽然可以在运行时生成HTML元素并将其添加到视图的显示对象,但OpenLaszlo内核将处理所有鼠标和keydown事件,而不是将它们传递给您创建的textarea。

OpenLaszlo中的<inputtext>组件实例化内部<textarea>。编译以下OpenLaszlo DHTML应用程序:

<canvas debug="true">

  <inputtext id="iText" multiline="true" width="100" resize="true" bgcolor="red">
    <handler name="oninit"><![CDATA[
        this.setAttribute('text', 'Just\na\ntest!');
    ]]></handler>
  </inputtext>

</canvas>

现在通过在浏览器JavaScript控制台中输入此表达式来检查文本对象:

iText.sprite.__LZdiv.children[0]

你会看到类似的东西:

<textarea class="lzswfinputtextmultiline" name="" style="color: rgb(0, 0, 0); width: 96px; height: 40px; pointer-events: auto;">

根据浏览器的不同,样式值可能会有所不同。

不幸的是,OpenLaszlo没有提供API来将自定义textarea添加到应用程序,而无需自己处理textarea的keydown,focus和mouse事件。这实际上是LFC /内核类(LzText.lzsLzInputText.lzsLzTextSprite.jsLzInputTextSprite.js)的组合:它们复制DHTML的SWF文本类行为 - 因为OpenLaszlo有DHTML运行时之前的SWF运行时。

这不是HTML5的最佳选择,可能是OpenLaszlo平台最大的弱点之一。因此,最好不要将自己的<textarea>添加到DHTML运行时应用程序中 - 除非您将其添加到iFrame /单独的HTML页面中。