【问题标题】:How to integrate textarea in openlaszlo?如何在 openlaszlo 中集成 textarea?
【发布时间】:2012-10-29 13:16:31
【问题描述】:

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

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

【问题讨论】:

  • 您预计会发生什么?您想动态创建一个新的文本区域,还是希望该文本在文本字段中显示为文本内容?
  • @RajuBitter:我已经更新了这个问题。我可以看到文本区域,但无法在文本区域中输入任何内容。

标签: openlaszlo lzx


【解决方案1】:

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

OpenLaszlo 中的&lt;inputtext&gt; 组件实例化了一个内部&lt;textarea&gt;。编译以下 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]

你会看到类似的东西:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    相关资源
    最近更新 更多