1

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

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

1 回答 1

2

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

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 来将您的自定义文本区域添加到应用程序,而无需自己处理文本区域的按键、焦点和鼠标事件。这实际上是 LFC/内核类(LzText.lzsLzInputText.lzsLzTextSprite.jsLzInputTextSprite.js)的组合所做的:它们复制 DHTML 的 SWF 文本类行为 - 因为 OpenLaszlo 在 DHTML 运行时之前具有 SWF 运行时。

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

于 2012-10-29T17:46:08.353 回答