2

OpenLaszlo的优点之一是创建自定义组件相对容易,尤其是结合使用类层次结构、mixinsCSS 支持和最新版本的 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是否曾经创建过更新的组件集,或者社区是否有可用的开源组件集?如果没有,有没有人考虑开始这样的项目?

4

1 回答 1

1

在创建当前组件很久之后,OpenLaszlo 的 mixins、css 支持甚至 HTML5 模式(以前​​称为 DHTML 模式)都被添加到平台中。自从我在 2006 年开始使用 OpenLaszlo 3.3.3 以来,它们的外观一直没有改变,这可能是它们仍然以旧方式实现的原因。据我所知,没有可用的开源组件集,大多数公司最终都会根据人们在 OpenLaszlo 论坛上所说的话来扩展基本组件以自行对其进行皮肤处理。

大多数可视组件类都有一个“基”类,它具有基本功能而无需皮肤,因此您可以扩展它们以使它们看起来像您想要的样子,您可以在参考手册中找到它们:

http://www.openlaszlo.org/lps4.9/docs/reference/

例如,<combobox> 扩展了 <basecombobox> 等。

于 2012-08-20T16:02:57.577 回答