是否有用于访问 DHTML 运行时中 OpenLaszlo 视图的 HTML div 对象的公共 API?OpenLaszlo 文档中似乎没有这样的示例,但从技术上讲,它应该是可能的。
1 回答
创建 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; "></div>
视图的对象层次结构是 *view->sprite->__LZdiv* 属性。这意味着,对于每个视图,OpenLaszlo 都会实例化一个特定于运行时的 sprite 对象,该对象又会为 DHTML 运行时生成相应的 div。
v1.sprite.__LZdiv.style.backgroundColor "rgb(255, 0, 0)"