1

テキストエリアを 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 カーネルはすべてのマウス イベントとキーダウン イベントを処理し、作成したテキストエリアには渡しません。

<inputtext>OpenLaszloのコンポーネントは internal をインスタンス化します<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 ) の組み合わせが効果的に行うことです。OpenLaszlo には DHTML ランタイムの前に SWF ランタイムがあったため、これらは DHTML の SWF テキスト クラスの動作を複製します。

これは HTML5 にとって最適とは言えず、おそらく OpenLaszlo プラットフォームの最大の弱点の 1 つです。したがって<textarea>、DHTML ランタイム アプリに独自のアプリを追加しないことをお勧めします。ただし、それを iFrame/別の HTML ページに配置する場合を除きます。

于 2012-10-29T17:46:08.353 に答える