14.Program Structure

出自OpenFace

跳转到: 导航, 搜索

Prev                                                                              Next  

                            第十三章  程序结构

                            第三部分 基本概念


目录

canvas 标签

  每个LZX应用程序只有一个canvas,它是应用程序的所有试图和元素的容器。

  LZX应用是一个带有canvas元素的XML文件,它也包含了若干配置和定义应用程序的属性和元素。例如:

Example 13.1. Hello World

<canvas height="15">
 <text>Hello, World</text>
</canvas>

  该例子是一个简单的LZX应用。canvas的宽和高属性值是标准的像素;如果不精确的指定这些属性的值,默认的宽和高是100%。


  除了包含在canvas块中的LZX代码以外,OpenLaszlo应用程序还可能要使用到其他库文件的代码。这些库可以和主程序一起编译(用<include>标签)。这些将在下文进行描述。

文件在编译时被加载

  文件在编译时被加载

  LZX应用文件可以通过<include>包含其他的LZX文件。当使用<include>标签时,被涉及的这些库将被编译到程序中。

  例如: Example 13.2. Simple include

<canvas>
  <include href="hello-incl.lzx"/>
</canvas>


适合编译到库的<include>标签

  <include>标签执行XML包括的XInclude标准。<include>标签可用于以下三种方式:

  包含一个<library>文件。

  包含一个元素层次结构。

  包含来自文本文件的文本。

OpenFace应用的源码能被包含到一个简单的源文件中,该文件指定了应用所有方面。<include>标签 或者<library>标签能从一个应用中把源文件分离成多个文件。

  通过把应用划分成多个文件,可以将文件的大小限制在可维护的范围内。你甚至还可以把多层次的视图分割成很多文件,进而改进模块化,灵活性和源代码管理。

  属性值href定义了要包含在<include>元素中的文件名。即包含的目标文件。


包含一个Library

  当目标是一个library文件(根元素是<library>的xml文件)时,library文件中的任何视图,脚本,字体,资源,数据源,数据集,和类的定义都将包含在应用程序中。一个library文件也可以包含其他的library。但一个library文件只能在应用程序中包含一次。


Example 13.3. 包含Library

<canvas height="100" width="400">
 <include href="library.lzx"/>
  </canvas>
<library>
    <text name="test" text="MyTitle"/>
</library>

包含一个实例

  当目标文件是一个非library的xml文件时,它的根元素就包含在include元素处。这样可以把一个视图层次结构分解成多个文件实现。和包含一个library文件不同,一个非library文件每次包含时都插入。

  下面的例子就在一个视图中插入了两个文本,内容都是“Click me”:

Example 13.4. Including a node

<canvas height="100">
  <view >
   <simplelayout axis="y" />
   <include href="inner.lzx"/>
   <include href="inner.lzx"/>
  </view>
</canvas>

Example 13.5. inner.lzx

<text>Show me!</text>

  联系例子使用includes这种方法把一个大的程序分割为多个文件。

包含文本

  如果类型属性值为text,文件就以字符的形式被包含,而非XML。这样就可以把另一个文件中的内容按字面上的文本包含进来。

Example 13.6. 包含文本

<canvas height="100">
 <view>
   <text>
     <include href="mytext.txt" type="text"/>
   </text>
 </view>
</canvas>


<library>标签

  <library>标签中包含的文件即library文件。library文件是不能被编译进应用程序中的,但通过<include>标签,应用程序可以包含多个library文件。library文件用来将应用程序的代码分割成多个文件或在多个应用程序间共享代码。

  比如,可以通过包含一个library来定义一个视图,而不是直接在canvas下直接定义一个view(<canvas><view name="mywindow"/></canvas>)。在这种情况下,应用中的canvas源文件读到<canvas><include href="mylib.lzx"/></canvas>, 这样定义了 <library><view name="mywindow"/></library>的mylib.lzx 文件将被包含。

library文件可以包含canvas源代码文件所能包含的任何元素,除了<splash>,<connection>。在库中包含的元素有代码,视图和定义。


  一个应用程序只能包含一个库的一个副本,不管你使用了多少个include。例如,<canvas><include href="mylib.lzx"/><include href="mylib.lzx"/></canvas>与先前的例子是等效的:只有一个view被定义。

Library目录

  如果一个目录包含一个名叫library.lzx 的文件,你可以通过引用目录名来包含那个文件。例如:utils目录保留了一个文件library.lzx。因此下面的两个程序段达到的效果是一致的:

Example 13.8. 包含library.lzx 文件

<include href="utils/library.lzx"/>

Example 13.9. 包含library.lzx 文件

<include href="utils"/>

  同样地,你可以写<include href="utils/states"/>来包含utils/states/library.lzx 这个文件。

自动包含

  有时在引用了一些分散的组件时,应用程序把它们自动包含进来了。比如,应用程序可使用一个没有定义的标签,因为它在base,lz,charts或utils目录中有定义,而这些目录中的类被包含了进来。下面成对的程序因此等效:

Example 13.10.

<canvas height="50">
 <include href="lz/button.lzx"/>
 <text>Show me!</text>
</canvas>


Example 13.11.包含<text>标签

<canvas height="50">
 <text>Show me!</text>
</canvas>


Example 13.12. <text>作为子标签

<canvas height="50">
 <include href="lz/button.lzx"/>
 <class name="bt" extends="text">
     <text  name="t" x="5" width="100"/>
 </class>
 <bt bgcolor="red" width="100" height="30">hello</bt>
</canvas>

Example 13.13. <text>作为类的 子标签

<canvas height="50">
 <class name="bt" extends="text">
     <text  name="t" x="5" width="100"/>
 </class>
 <bt bgcolor="red" width="100" height="30">hello</bt>
</canvas>

  下面的两个程序定义了他们自己的 <text>标签,因此不需要隐含地包含定义了OpenFace <text>标签的文件


Example 13.14. 定义view

<canvas height="50">
 <class name="bt">
 </class>
 <bt  bgcolor="red" width="100" height="30"/>
</canvas>

Example 13.15. 定义子text


<canvas height="50">
 <class name="bt">
     <text name="t" x="5" width="100" text="hello"/>
 </class>
 <bt bgcolor="red" width="100" height="30"/>
</canvas>


调试

  LZX应用中可以通过Debug.write();来打印出要调试的信息,从而可以对程序进行调试。

Example 13.16.编译时使用debug

<canvas height="140">
  <script>
     Debug.write("@@Debugging information");
  </script>
</canvas>

资源和数据源

  除了包含类和实例外,库文件还可以使用<resource>和<datasource>标签来包含定义在外部文件的媒体资源和XML数据源。

  应用程序中的元素,比如<script>,<class>,和<view>的扩展,让它们出现在源文件中,都要经过仔细考虑。特别的是,<script>元素中代码不能涉及随后的<view>元素。


                                  home

Prev                                                                          Next