OpenLaszlo的优点之一是创建自定义组件相对容易,尤其是结合使用类层次结构、mixins、CSS 支持和最新版本的 OpenLaszlo 添加的 CSS2/3 功能。
但是当我查看 OpenLaszlo 5.0 主干中最新组件的源代码时,在渲染组件时似乎没有使用这些功能。以<checkbox> 类为例:
<library>
<include href="base/baseformitem.lzx"/>
<include href="base/multistatebutton.lzx"/>
<resource name="lzcheckbox_rsrc">
<frame src="resources/checkbox/checkbox_off.swf" />
<frame src="resources/checkbox/checkbox_off_mo.swf" />
<frame src="resources/checkbox/checkbox_on.swf" />
<frame src="resources/checkbox/checkbox_disable_off.swf" />
<frame src="resources/checkbox/checkbox_on.swf" />
<frame src="resources/checkbox/checkbox_on_mo.swf" />
<frame src="resources/checkbox/checkbox_off.swf" />
<frame src="resources/checkbox/checkbox_disable_on.swf" />
</resource>
<!-- A checkbox component representing a boolean -->
<class name="checkbox" extends="baseformitem" pixellock="true">
<!-- FIXME: [hqm 2006-09] LPP-2244 This used to be y="$once{classroot.text_y}"
but the DHTML runtime fires an early text onheight event, which has the wrong value,
so we need to use an 'always' constraint till we fix it
-->
<text name="_title" x="16" y="${classroot.text_y}" text="${parent.text}" resize="true"/>
<!--- the y position of the text label. default: centered -->
<attribute name="text_y"
value="${this.cb.height/2 - this._title.height/2+1}" type="number"/>
<!--- @keywords private -->
<attribute name="value" setter="setValue(value)" value="false"/>
<!-- views -->
<multistatebutton name="cb" resource="lzcheckbox_rsrc" text=""
statenum="${parent.value ? 1 : 0}"
statelength="4" maxstate="1"
reference="parent">
</multistatebutton>
复选框由许多定义为 SWF 文件的资源组成(这意味着,无法更改复选框的样式)。对于 DHTML 运行时,SWF 资源被转换为 PNG 文件:
lps/components/lz/resources/checkbox/checkbox_disable_on.swf lps/components/lz/resources/checkbox/autoPng/checkbox_disable_on.png
这种方法似乎非常过时,并且与为组件使用绘图 API 和 CSS 的组合相比具有明显的缺点:
- 对现有组件进行蒙皮需要创建新资源。
- 除非您接受像素化效果,否则组件不会缩放。随着越来越多的移动设备使用不一致的 DPI 值,这尤其是一个问题。
- 阴影等效果是资源的一部分,无法激活、停用或修改。
- 由于原始 .fla 文件似乎不可用,因此甚至无法修改现有样式。
Laszlo是否曾经创建过更新的组件集,或者社区是否有可用的开源组件集?如果没有,有没有人考虑开始这样的项目?