2

是否有用于访问 DHTML 运行时中 OpenLaszlo 视图的 HTML div 对象的公共 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=proxyed(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。您看不到任何 id 值为“v1”的 div,因为视图实例被实例化为存储对视觉呈现的引用的 JavaScript 对象。您可以通过调用访问 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 都会实例化一个特定于运行时的 sprite 对象,该对象又会为 DHTML 运行时生成相应的 div。

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

以下是LzViewLzSprite类的实现链接,如果您有兴趣了解其内部结构:

于 2012-08-13T08:33:51.713 回答