1. openlaszlo认识
openlaszlo是一种富客户机应用程序架构,使用Macromedia Flash作为部署载体。Openlazlo应用程序开发使用基于xml的lzx语言,它可以被编译成dhtml,swf等格式。它依赖javascript来表达逻辑,并提供了传统flash开发方式无法比拟的一些优点,包括高级UI约束系统、面向对象的设计方法学以及内置的对web服务和各种风格的远程过程调用的支持。
Laszlo是它所用的一种语言,这种语言通过说明性方法,用xml和javascript来创建部件或整个应用程序。Laszlo不是通过浏览器在客户端来解释的,而是在服务器端将语言转换成Macromedia flash格式。
优点:
部署
Proxied和Solo
Proxied部署方式,可以得到Openlaszlo系统所能提供的所有特性。这是这种部署的一个优点,但是:这了使用这种部署模型,必须的服务器上安装一个Openlaszlo Server环境。这种服务器环境是位于j2ee应用程序或servlet容器之上的一个web应用程序,负责为.lzx文件处理所有请求。 OpenLaszlo Server 自动捆绑了Tomcat。
Solo(standlone OpenLaszlo output的简称)部署方式只受那些可以为flash文件服务的web服务器的支持。默认为solo部署方式。由于在 SOLO 部署方式下媒体请求不是代理的,因此 SOLO 应用程序只支持 Flash、JPG 和 MP3 媒体类型。而且,由于不存在数据的代理,SOLO 部署中也不支持 RPC、SOAP 和持久连接之类的项。
2、语法和语义
在lzx中,xml标记是用来创建javascript的对象。Javascript用来操纵lzx程序中所创建的对象。
Lzx严格遵守xml和javascript语法。
Lzx的大部分功能是由xml标记来执行的。
Lzx程序本身就是合法的xml文档。
Lzx程序如果不是合法的xml将不会被编译。
Lzx程序只能操作封装在xml中的数据。
命名空间
<canvas xmlns="http://www.laszlosystems.com/2003/05/lzx">...</canvas>
也可以使用
<canvas>...</canvas>
如果没有命名空间,编译器默认的是LZX的命名空间(http://www.laszlosystems.com/2003/05/lzx")
Openlaszlo中使用的变量,须先定义。
LZX类中,对象的this作用域只在该方法或者handlers中。
LZX允许定义自己的标记。
通过<class>可以创建lzx的对象。创建的类必须给定name和extends.新创建的类将继承给定类的所以属性,同时,它也可以有自己的属性。
在lzx中属性有两个不同的含义,一个表示语义,一个表示语法。
<attribute>可以定义js对象的属性值。
Handlers类似于Methods。但方法是通过对象的name来激活的。Handler必须关联到一个特定的事件。
<view>
<method name="bark">
<!-- some JavaScript code -->
</method>
<handler name="onclick">
this.bark()
</handler >
</view>
当点击view的时候,触发handler代码,调用bark()方法
可以通过传统的js语法定义方法。但得事先用<method>声明该方法。
约束模型
通过Laszlo的约束模型,可以非常优雅的获得UI控件和动画效果。
任何属性,都可以为之赋予一个约束表达式,而不是一个标准的值。约束表达式以$美元符号开头,其格式如下:
$when
{expression
}
when的值是always、once、immediately中的一个。默认值为always.
always 每当expression的一个依赖关系发生改变,该约束都将重新计算。
Once 一个约束在初始化之后一直是静态的。这样可以使约束只计算一次,可以提高效率。
Immediately 定义了结束元素,并且约束不依赖于其他对象,就可以使用这个值来计算约束。
Lzx中,name 属性是局部变量,id属性是全局变量。
Javascript可以处于<script></script>、<method></method>、<handler></handler>标记当中。也可以是 oninit="
script expression
"
在
lzx
中,大部分事情即可以用
xml
标记实现也可以用
javascript
实现。
通常标记用于在编译时计算完成如
canvas
的布局。而脚本用于处理运行时事情,如响应用户的输入。
·
Use tags when that is the only option.(比如每一个lzx程序都得以<canvas>开始</canvas>结束。以及<splash>
, <method>
, <attribute>
, <resource>
, <font>
等标记)
· Use JavaScript when that is the only option.
· If something can be done with either tags or script, use tags (unless there is a good reason not to). 如创建一个叫sam的view可以使用标记<view name=”view”>也可以使用脚本sam=new lz.view();
LZX语言的执行顺序:
<view name="outside">
<view name="inside"/>
</view>
Inside要比outside先创建。