Table of Contents
OpenLaszlo components are high-level objects that implement common user-interface functions.
They range from relatively simple objects such as <button>
to
complex objects such as <form>
and
<grid>
.
Components supplied with the OpenLaszlo Server are called LZ components.
This tutorial introduction is intended to show you the variety of OpenLaszlo components and demonstrate how to use their basic features. Later chapters explain how to use advanced features of components and how to create your own components.
The simplest way to build an OpenLaszlo application is to use LZ components "out of the box" with their default behaviors. This chapter includes a few such examples. It also includes a few examples that use concepts that have not yet been introduced. Don't worry if you don't understand exactly how they work. The idea here is to get acquainted with the general "feel" of an OpenLaszlo application that is built mostly from components. The subsequent tutorials present the concepts you'll need in order to create your own applications.
Before reading this chapter about how to use components to build an OpenLaszlo application, you should take a few moments to get familiar with the range of components that ship with OpenLaszlo.
The example below shows a miscellaneous collection of components. It's an abbreviated version of the sampler in the OpenLaszlo Explorer, which contains a visual tour of all the components. The code that implements these components may look a little intimidating if you have not worked with this kind of language before, but don't be put off. In fact you may not even want to look at the code yet. Your goal here is to start thinking about the kinds of things you can do in an OpenLaszlo application, and components provide your quickest route to productivity.
The LZX Reference documents all the tags, attributes and methods associated with each component.
Example 6.1. Components miscellany
<canvas
width
="100%
" height
="500
">
<silverstyle
name
="silvercolors
"/>
<greenstyle
name
="greencolors
"/>
<bluestyle
name
="bluecolors
"/>
<view
id
="s1
" x
="20
" y
="20
">
<view
layout
="spacing:20
">
<text
>Choose a style to change colors...
</text
>
<view
name
="stylechooser
" layout
="axis:x; spacing:4
">
<text
>Style:
</text
>
<combobox
width
="120
" editable
="false
">
<handler
name
="onselect
">
var colorchoice = this.text;
canvas[colorchoice+'colors'].setAttribute("isdefault", true);
</handler
>
<textlistitem
text
="silver
"/>
<textlistitem
text
="green
"/>
<textlistitem
text
="blue
" selected
="true
"/>
</combobox
>
</view
>
<tabslider
width
="250
" height
="200
">
<tabelement
text
="holiday cheer
" selected
="true
">
<radiogroup
>
<radiobutton
text
="peace on earth
"/>
<radiobutton
text
="joy to the world
"/>
<radiobutton
text
="happy new year
"/>
</radiogroup
>
</tabelement
>
<tabelement
text
="housewares
">
<simplelayout
axis
="y
" spacing
="10
"/>
<checkbox
text
="stainless steel
"/>
<checkbox
text
="glassware
"/>
</tabelement
>
<tabelement
text
="isotope
">
<text
multiline
="true
" width
="${immediateparent.width}
">
Atoms that have the same number of protons but a different number of neutrons. They are atoms of the same element that have different masses. The isotope number is the number of protons plus the number of neutrons.
</text
>
</tabelement
>
</tabslider
>
<tabs
>
<tabpane
>Insecticides
<simplelayout
spacing
="10
" inset
="10
"/>
<radiogroup
>
<radiobutton
>Yes, I want to know more
</radiobutton
>
<radiobutton
>No, I prefer to remain blissfully unaware
</radiobutton
>
<radiobutton
>Please tell my neighbor, who may tell me
</radiobutton
>
</radiogroup
>
</tabpane
>
<tabpane
text
="Subliminal
">
<button
height
="22
">Submit
</button
>
</tabpane
>
</tabs
>
</view
>
<window
text
="test window
" width
="250
" height
="250
" x
="410
" y
="180
" resizable
="true
" id
="fw
" title
="A Simple Window
">
<menubar
name
="mbar
" placement
="menubar
">
<menu
name
="file
" id
="mfile
" width
="80
">File
<menuitem
text
="item 1
"/>
<menuseparator
/>
<menuitem
id
="MWS
" text
="item 3
">
<menu
name
="subedit
">subedit
<menuitem
text
="subitem 1
"/>
<menuitem
text
="subitem 2
"/>
</menu
>
</menuitem
>
</menu
>
<menu
name
="Options
">Document
<menuitem
text
="option 1
"/>
<menuitem
text
="option 2
"/>
</menu
>
</menubar
>
<scrollbar
/>
</window
>
<view
layout
="spacing:14
">
<button
height
="22
">Submit
</button
>
<button
height
="22
" enabled
="false
">disabled
</button
>
<combobox
width
="100
">
<textlistitem
text
="pistachio
" selected
="true
"/>
<textlistitem
text
="chocolate chip
"/>
</combobox
>
<radiogroup
>
<radiobutton
text
="tension
"/>
<radiobutton
text
="distance
"/>
</radiogroup
>
</view
>
<view
layout
="spacing:20
">
<view
layout
="spacing:10
">
<checkbox
text
="I want to take a weekend flight
"/>
<checkbox
text
="Also search airports within 70 miles
"/>
</view
>
<view
layout
="spacing:5
">
<edittext
width
="200
" text
="text entry here
"/>
<edittext
width
="200
" text
="disabled
" enabled
="false
"/>
</view
>
</view
>
<simplelayout
axis
="x
" spacing
="20
"/>
</view
>
</canvas
>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
* Copyright 2007, 2008-2011 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
You will notice that the OpenLaszlo Explorer groups components into "form components" and
"general components." This is merely a heuristic grouping of those components that usually
appear within a <form>
tag and those that don't. There is no
essential difference; for example, the <button>
tag can be
contained in a <view>
or
<window>
; it does not have to be contained in a
<form>
.
Depending on your background in building web applications, you may be inclined to use the
<form>
in place of the HTML
<form>
tag. This is often a mistake; OpenLaszlo applications
are based on a different interaction model than HTML-based applications and overuse of the
<form>
tag results in LZX programs that fail to exploit
OpenLaszlo's range of options.
The <form>
tag is, generally speaking, not a widely used
tag in LZX applications. It is intended to be used in situations in which the client-server
interaction is simple, and there is a 1:1 mapping between the returned server data and the form
elements. When the server interaction is more complicated, more advanced databinding techniques
should be used, as explained in later chapters.
In this section we'll explore the various ways to use components in OpenLaszlo applications:
using tags
using script APIs
using databinding
As mentioned above, the concepts of scripting and databinding are presented in later chapters. Don't worry if you're not completely comfortable with these topics.
The simplest way to use the components is in an application that has tags only—no script. The following trivial example shows what this looks like.
Example 6.2. Components example-tags only
<canvas
height
="100
" width
="100%
">
<simplelayout
axis
="x
" spacing
="10
" inset
="10
"/>
<list
shownitems
="4
">
<textlistitem
>judy
</textlistitem
>
<textlistitem
>ann
</textlistitem
>
<textlistitem
>betsy
</textlistitem
>
<textlistitem
>sarah
</textlistitem
>
<textlistitem
>carol
</textlistitem
>
<textlistitem
>danah
</textlistitem
>
</list
>
<radiogroup
>
<radiobutton
text
="apple
"/>
<radiobutton
text
="cherry
"/>
<radiobutton
text
="key lime
"/>
</radiogroup
>
</canvas
>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
* Copyright 2007, 2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
As a practical matter, you will usually need to use some script, whether in a method, or,
less frequently, to create a component within a <script>
element.
In addition to declaring components in tags, you can create and manipulate components from script.
The following example shows how you can create buttons using tags and script.
Example 6.3. Creating components from script
<canvas
height
="150
" width
="100%
">
<simplelayout
/>
<!--Here is a button created with a tag -->
<button
name
="framitz
" width
="50
">
hello
</button
>
<script
>
//And here is a button created with using script
var b = new lz.button();
b.setAttribute("width", 50);
b.setAttribute("height", 50);
</script
>
</canvas
>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
* Copyright 2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
In the example below, the onclick
method procedurally adds an item to
the <list >
component.
Example 6.4. Component APIs
<canvas
height
="150
" width
="100%
">
<simplelayout
spacing
="10
"/>
<list
id
="mylist
" height
="82
">
<textlistitem
text
="something
"/>
</list
>
<view
layout
="axis:x;spacing:4
">
<edittext
id
="item
" text
="new item
"/>
<button
text
="Add
" isdefault
="true
">
<handler
name
="onclick
">
mylist.addItem(item.text);
</handler
>
</button
>
</view
>
</canvas
>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
* Copyright 2007, 2008-2011 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
A third way to create components is through databinding. In the example below, a new
component textlistitem
is created for each matching node in the "mydata"
dataset.
Example 6.5. Data-Driven Components
<canvas
height
="200
" width
="100%
">
<dataset
name
="mydata
" src
="resources/contacts.xml
" request
="true
"/>
<simplelayout
axis
="x
" spacing
="10
" inset
="10
"/>
<list
id
="a
">
<textlistitem
datapath
="mydata:/contacts/person
" text
="$path{'@firstname'}
"/>
</list
>
<list
id
="b
" shownitems
="4
">
<textlistitem
datapath
="mydata:/contacts/person
" text
="$path{'@firstname'}
"/>
</list
>
</canvas
>
<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
* Copyright 2007, 2008 Laszlo Systems, Inc. All Rights Reserved. *
* Use is subject to license terms. *
* X_LZ_COPYRIGHT_END ****************************************************** -->
Copyright © 2002-2010 Laszlo Systems, Inc. All Rights Reserved. Unauthorized use, duplication or distribution is strictly prohibited. This is the proprietary information of Laszlo Systems, Inc. Use is subject to license terms.