2

DHTMLランタイムでOpenLaszloビューのHTMLdivオブジェクトにアクセスするためのパブリックAPIはありますか?OpenLaszloのドキュメントにはその例がないようですが、技術的には可能であるはずです。

4

1 に答える 1

2

DHTML ランタイムが作成されたとき、OpenLaszlo チームは、LZX を使用して HTML div 構造の実装の詳細を開発者から隠すことにしました。ビューの基になるオブジェクト構造に直接アクセスすることはお勧めしませんが、そうしなければならない状況もありますが、将来のプラットフォームの更新でアプリケーションが壊れる可能性があります。

次の簡単なアプリケーション例を見てください。

<canvas debug="false">

  <view name="v1" x="10" y="10" width="100" height="100" bgcolor="red">
  </view>

</canvas>

クエリ文字列を使用してアプリケーションをコンパイルする場合

lzoptions=proxied(true)%2Cruntime(dhtml)&target=html

開発者コンソールなしでアプリケーションを取得するだけです。ページ構造を調べると、次の div 構造が表示されます。

<body>
  <div id="appcontainer" style="height: 100%; width: 100%; margin: 0px; padding: 0px; border: 0px none; overflow: hidden; text-align: left; ">
    <div class="lzappoverflow" style="width: 1905px; height: 429px; ">
      <div class="lzcanvascontextdiv" id="lzcanvascontextdiv">
        ...
      </div>
      <div class="lzcanvasdiv">
        <!-- visual part of view instance with id="v1" -->
        <div class="lzdiv" style="background-color: rgb(255, 0, 0); height: 100px; width: 100px; left: 10px; top: 10px; z-index: 2; "></div>
      </div>
    </div>
  </div>
</body>

CSS 情報を削除し、id=v1 でビューを表す div をマークするコメントを追加しました。ビュー インスタンスは、ビジュアル プレゼンテーションへの参照を格納する JavaScript オブジェクトとしてインスタンス化されるため、id 値が「v1」の div は表示されません。呼び出してdivにアクセスできます

v1.getDisplayObject()

戻ります

<div class=​"lzdiv" style=​"background-color:​ rgb(255, 0, 0)​;​ height:​ 100px;​ width:​ 100px;​ left:​ 10px;​ top:​ 10px;​ z-index:​ 2;​ ">​&lt;/div>​

ビューのオブジェクト階層は *view->sprite->__LZdiv* プロパティです。つまり、各ビューに対して、OpenLaszlo はランタイム固有のスプライト オブジェクトをインスタンス化し、DHTML ランタイムに対応する div を生成します。

v1.sprite.__LZdiv.style.backgroundColor "rgb(255, 0, 0)"

内部構造について知りたい場合は、 LzViewおよびLzSpriteクラスの実装へのリンクを次に示します。

于 2012-08-13T08:33:51.713 に答える