Designer Layouts EXTJS
Designer Layouts EXTJS
Sencha, Inc.
www.sencha.com
525 University Avenue, Suite 23
Palo Alto, CA 94301
Contents
What is a Layout? .................................................................................................................. 1
Nested Layouts................................................................................................................. 1
Default Layouts................................................................................................................. 1
Flexible Box Layouts.......................................................................................................... 2
Stretching Components to Fit........................................................................................ 3
Basic Container Layouts .................................................................................................... 4
auto........................................................................................................................... 4
absolute..................................................................................................................... 4
accordion.................................................................................................................... 5
anchor....................................................................................................................... 5
border........................................................................................................................ 5
card........................................................................................................................... 6
column....................................................................................................................... 6
fit ............................................................................................................................. 7
form ......................................................................................................................... 7
hbox.......................................................................................................................... 8
table.......................................................................................................................... 8
vbox.......................................................................................................................... 9
Configuring the Layout for a Container .................................................................................... 10
Using CardLayout to Create a Wizard....................................................................................... 11
Using BorderLayout for a Viewport...........................................................................................15
Using HBoxLayout to Create Multiple Columns .......................................................................... 17
What is a Layout?
In ExtJS, layouts control the size and position of the components within an application. You configure
a layout on each container to manage how that container's children are rendered. The container layout
determines what size and position configuration options can be set on its child components.
Nested Layouts
A child component always takes its layout information from its direct parent. When you nest
containers, the layout you configure on each container manages the layout of whatever components
(including other containers) it contains. However, the layout doesn't have any effect on the contents
of any child containers, only the containers themselves.
Default Layouts
Some types of containers are automatically configured with a default layout. For example, a
FormPanel automatically uses the Form layout and a TabPanel defaults to the card layout. In most
cases, you'll want to use the default layout if one is configured, but you can change the layout if you
need to.
1
Working with Layouts in Designer
Note: For simplicity, these examples use whole numbers, but you can set the flex attribute to any
floating point value.
2
Working with Layouts in Designer
If you set an absolute width or height for some components and a flex value for others, the absolute
sizes are subtracted from the total available space and the remaining space is allotted to the flexed
components. For example, if the container is 400 pixels wide and the width of Panel 1 is set to 200
pixels, the panels with flex attributes set share the remaining 200 pixels. If Panel 2 has a flex of 2 and
Panel 3 has a flex of 1, Panel 2 will get 2/3 of the space and Panel 3 will get 1/3 of the space.
Note: If neither an absolute size or a flex value are specified for a component, the framework checks
to see if the size is defined in the application's CSS. If no size is specified in the CSS, the framework
assigns the minimum necessary space to the item.
3
Working with Layouts in Designer
The stretchmax option works just like stretch, except it stretches subcomponents to the size of the
tallest or widest component, rather than the size of the container.
auto
If no other layout is set for a container, it defaults to the auto layout. For general purpose containers
such as a Panel, this means child components will be rendered sequentially. Note that some containers
are automatically configured to use a particular layout. For example, FormPanel defaults to the form
layout and TabPanel defaults to the card layout.
absolute
Arranges components using explicit x/y positions relative to the container. This enables you to
explicitly reposition and resize components within the container. While this gives you fine-grained
control over the layout, keep in mind that absolute-positioned components remain fixed even if their
parent container is resized.
When you use the absolute layout, Designer displays a grid within the container. By default,
components are snapped to the grid as you reposition them. You can change the grid size or disable
the grid by clicking on the container's flyout config button. The grid is only displayed as a layout guide
in the Design view, it is not visible when the component is rendered.
4
Working with Layouts in Designer
accordion
Arranges panel components in a vertical stack where only one panel is expanded at a time. Only
panels (including FormPanel and TabPanel) can be added to a container that uses the accordion
layout.
anchor
Arranges components relative to the sides of the container. You can specify the width and height of
child components as a percentage of the container or specify offsets from the right and bottom edges
of the container. If the container is resized, the relative percentages or offsets are maintained.
border
Arranges panel components in a multi-pane layout. Panels are arranged in the container by assigning
them to one of five regions: North, South, East, West, or Center. A container that uses the border
layout has to have a child assigned to the Center region. The center panel is automatically sized to fit
the available space. You can resize the North, South, East, and West panes on the canvas by clicking
and dragging the right or bottom edge of the panel.
You can make any of the panels in a border layout collapsible by enabling the collapsible attribute.
When rendered, the child panels automatically resize when the container is resized.
5
Working with Layouts in Designer
card
Arranges multiple child components but only one component is visible at a time. This layout can be
used to step through a series of components and is commonly used to create wizards.
To specify the component that you want to make visible, you need to call setActiveItem. Typically, you
attach this behavior to a navigation UI such as Previous and Next buttons in the footer of the
container.
column
Arranges components in a multi-column layout. The width of each column can be specified either as a
percentage (column width) or an absolute pixel width (width). The column height varies based on the
contents. You can enable autoscroll so it's possible to scroll to view column contents that exceed the
container height.
6
Working with Layouts in Designer
fit
Expands a single child component to fill the available space. For example, you might use this to create
a dialog box that contains a single TabPanel. If the container is a type of panel component, you can
also add a Toolbar to it.
7
Working with Layouts in Designer
form
Arranges a collection of labelled form fields. A FormPanel uses the form layout by default.
hbox
Arranges the child components horizontally. Setting the alignment of the container to stretch causes
the child components to fill the available vertical space. Setting the flex attribute of the child
components controls the proportion of the horizontal space each component fills.
table
Arranges components in an HTML table. You specify the number of columns in the table and can
create complex layouts by specifying the rowspan and colspan attributes on the child components.
8
Working with Layouts in Designer
9
Working with Layouts in Designer
vbox
Arranges the child components vertically. Setting the alignment of the container to stretch causes the
child components to fill the available horizontal space. Setting the flex attribute of the child
components controls the proportion of the vertical space each component fills.
10
Working with Layouts in Designer
You can also set the layout through the Component Config:
1. Select the container.
2. Set the layout attribute to the type of layout you want to use.
11
Working with Layouts in Designer
3. Drag a Panel component onto the Window for the first step in the wizard. Panels in a
CardLayout are numbered in the order they are added to the container, starting with item 0.
By default, item 0 is set as the active item. To change the active item within Designer, select
the Window and set the activeItem attribute to the panel you want to make active.
4. Add two more panels to the Window. You can drag them onto the title bar of the Window on
the canvas, or onto the Window in the Components tab.
5. Edit the title of the Window to name the wizard. You can double-click the Window title on the
Canvas to edit it, or select the Window and set the title attribute in the Component Config
inspector.
12
Working with Layouts in Designer
6. Hide the title bars of each Panel in the Wizard by selecting the Panel in the Components tab
and clicking the delete icon next to its title attribute in the Component Config inspector.
7. Add a Toolbar to the Window for the navigation buttons and dock it at the bottom of the
Window (bbar).
8. Add four buttons to the Toolbar and set the buttons' text attributes to Cancel, Previous, Next,
and Submit. You can double-click the button labels on the Canvas to edit them, and use tab to
move to the next button in the Toolbar.
9. To align the buttons, you can add a Fill between the Cancel and Previous button, and a Spacer
of width 20 between the Next and Submit buttons.
13
Working with Layouts in Designer
10. Set the autoRef attribute for each button so you can easily reference the buttons in your
navigation handler. For example, autoRef: cancelBtn, autoRef: prevBtn, autoRef: nextBtn, and
autoRef: submitBtn.
Now we're ready to add the content for each card in the Wizard. However, since we want to gather
user input, we actually want each card to be a FormPanel rather than a Panel. Fortunately, in Designer
it's easy to transform a component into another type.
To change the Panels into FormPanels, right-click each one and choose Transform > FormPanel.
For this example, we built a registration wizard for a series of horsemanship clinics with the three
cards shown below. By default, card 0 is the active card. To add form fields to the card 1 and card 2,
you'll need to select the Window and set its activeItem attribute to the panel you want to work on. For
more information about creating forms in Designer, see Building Forms in Working with Components
in Designer.
14
Working with Layouts in Designer
15
Working with Layouts in Designer
16
Working with Layouts in Designer
3. Drag a Panel into the Viewport. Because this is the only component currently in the layout, it
is automatically assigned to the Center region. This is going to be where we display
information about people who have signed up for one of our classes, so we set the title of the
Panel to Student Information.
4. Add a TreePanel to the Viewport. You can select the Viewport and double-click TreePanel in
the Toolbox to add it as a child of the Viewport, or drag the TreePanel onto the Viewport in the
Components tab. It will automatically be assigned to the West region. We're going to use the
tree to navigate through our classes, so we set the title of the TreePanel to Class List.
Note: To change the region that a subcomponent is assigned to, set its region attribute in the
17
Working with Layouts in Designer
Component Config inspector.
Now we're ready to configure the Class List tree and the Student Information Panel to display our
content. We'll populate the tree with our list of classes as described in Working with Components in
Designer, and use a template to display data for individual students in the Student Information Panel.
3. Add a Container component to the FieldSet for each column and configure the following
settings for both. It's easiest to select the column containers from the Component list, rather
than from the canvas. (When you first add them to the FieldSet, they are only 2 pixels tall.)
a. Set flex to 1.
b. Set the height to accommodate the checkboxes you want to add. For example, 60 pixels
will accommodate three rows of checkboxes.
4. Add checkboxes to each column container and set their boxLabel attributes.
Note: If you want to specify margins around the checkboxes, change the layout of the column
containers from auto to vbox, and then set the margin attribute for each individual checkbox.
18
Working with Layouts in Designer
19