blob: 752f6f1ea5c29918033acccf41ee9adabf6a6b15 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en-us" xml:lang="en-us">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="DC.Type" content="topic"/>
<meta name="DC.Title" content="Custom Flex components"/>
<meta name="DC.Format" content="XHTML"/>
<meta name="DC.Identifier" content="WS2db454920e96a9e51e63e3d11c0bf68268-8000_verapache"/>
<link rel="stylesheet" type="text/css" href="commonltr.css"/>
<title>Custom Flex components</title>
</head>
<body id="WS2db454920e96a9e51e63e3d11c0bf68268-8000_verapache"><a name="WS2db454920e96a9e51e63e3d11c0bf68268-8000_verapache"><!-- --></a>
<h1 class="topictitle1">Custom Flex components</h1>
<div>
<p> Flex supports a component-based
development model. You use the predefined components included with
Flex to build your applications, and create components for your
specific application requirements. You can create custom components
by using MXML or ActionScript.</p>
</div>
<div class="nested1" id="WS2db454920e96a9e51e63e3d11c0bf68268-7fff_verapache"><a name="WS2db454920e96a9e51e63e3d11c0bf68268-7fff_verapache"><!-- --></a>
<h2 class="topictitle2">About custom components</h2>
<div>
<p>Defining your own custom components has several benefits.
One advantage is that components let you divide your applications
into modules that you can develop and maintain separately. By implementing
commonly used logic within custom components, you can also build
a suite of reusable components that you can share among multiple
Flex applications. </p>
<p>Also, you can extend the Flex class hierarchy to base your custom
components on the set of predefined Flex components. You can create
custom versions of Flex visual controls, as well as custom versions
of nonvisual components, such as validators, formatters, and effects. </p>
<p>You can build an entire Flex application in a single MXML file
that contains both your MXML code and any supporting ActionScript
code. However, as your application gets larger, your single file
also grows in size and complexity. This type of application would
soon become difficult to understand and debug, and very difficult
for multiple developers to work on simultaneously. By breaking it
up into components, you can simplify the architecture and divide
the application among multiple developers.</p>
</div>
<div class="nested2" id="WS4b4ddee4904fe779-7c8da0131219ccf556a-8000_verapache"><a name="WS4b4ddee4904fe779-7c8da0131219ccf556a-8000_verapache"><!-- --></a>
<h3 class="topictitle3">Using modules in application development</h3>
<div>
<p>A common coding practice is to divide an application into
functional units, or modules, where each module performs a discrete
task. Dividing your application into modules provides you with many
benefits, including the following:</p>
<dl>
<dt class="dlterm">Ease of development</dt>
<dd>
<p>Different developers or development groups can develop and
debug modules independently of each other. </p>
</dd>
<dt class="dlterm">Reusability</dt>
<dd>
<p>You can reuse modules in different applications so that you
do not have to duplicate your work.</p>
</dd>
<dt class="dlterm">Maintainability</dt>
<dd>
<p>By developing your application in discrete modules, you can isolate
and debug errors faster than you could if you developed your application in
a single file. </p>
<p>In Flex, a module corresponds to a custom
component, implemented either in MXML or in ActionScript. The following
image shows an example of a Flex application divided into components:</p>
<div class="figborder">
<img src="images/inb_as.png" alt="Flex application divided into components"/>
</div>
<p>This example
shows the following relationships among the components:</p>
<ul>
<li>
<p>You define a main MXML file that contains the <samp class="codeph">&lt;s:Application&gt;</samp> tag. </p>
</li>
<li>
<p>In your main MXML file, you define an ActionScript block
that uses the <samp class="codeph">&lt;fx:Script&gt;</samp> tag. Inside the
ActionScript block, you write ActionScript code, or include external
logic defined by an ActionScript file. Typically, you use this area
to write small amounts of ActionScript code. If you must write large
amounts of ActionScript code, you should include an external file.</p>
</li>
<li>
<p>The main MXML file uses MXML and ActionScript to reference
components supplied with Flex, and to reference your custom components. </p>
</li>
<li>
<p>Custom components can reference other custom components. </p>
</li>
</ul>
</dd>
</dl>
</div>
</div>
<div class="nested2" id="WS2db454920e96a9e51e63e3d11c0bf68268-7ffd_verapache"><a name="WS2db454920e96a9e51e63e3d11c0bf68268-7ffd_verapache"><!-- --></a>
<h3 class="topictitle3">The Flex class hierarchy</h3>
<div>
<p>
Flex is implemented as an ActionScript
class hierarchy. That class hierarchy contains component classes,
manager classes, data-service classes, and classes for all other
Flex features. For a complete description of the class hierarchy,
see the <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/" target="_blank">ActionScript 3.0 Reference for the Adobe<sup>®</sup>
Flash<sup>®</sup> Platform</a>. </p>
<p>All visual components are derived from the <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/core/UIComponent.html" target="_blank">UIComponent </a>ActionScript
class. Flex nonvisual components are also implemented as a class
hierarchy in ActionScript. The most commonly used nonvisual classes
are the Validator, Formatter, and Effect base classes.</p>
<p>
You
create custom components by extending the Flex class hierarchy using
the MXML and ActionScript languages. Components inherit the properties, methods,
events, styles, and effects of their superclasses. </p>
</div>
</div>
<div class="nested2" id="WS4b4ddee4904fe779-5425298e1219cd43fc7-8000_verapache"><a name="WS4b4ddee4904fe779-5425298e1219cd43fc7-8000_verapache"><!-- --></a>
<h3 class="topictitle3">Spark and MX components</h3>
<div>
<p>Flex defines two sets of components: Spark and MX. The
Spark components are new for Flex 4 and are defined in the spark.*
packages. The MX components shipped in previous releases of Flex
and are defined in the mx.* packages. </p>
<p>Spark and MX define some of the same components. For example,
Spark defines a button control in the spark.components package,
and MX defines a button control in the mx.controls package. When
a component is available in both Spark and MX, it’s best to use
the Spark component.</p>
<p>Spark and MX also define components that are unique. For example,
Spark defines components to perform three dimensional effects. MX
defines charting controls not included in Spark. Your applications
often contains a mixture of Spark and MX components.</p>
</div>
</div>
<div class="nested2" id="WS2db454920e96a9e51e63e3d11c0bf68268-7ff9_verapache"><a name="WS2db454920e96a9e51e63e3d11c0bf68268-7ff9_verapache"><!-- --></a>
<h3 class="topictitle3">Customizing existing components</h3>
<div>
<p>One reason for you to create a component is to customize
an existing component for your application requirements. This customization
could be as simple as setting the <samp class="codeph">label</samp> property
of a <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/Button.html" target="_blank">Button</a> control
to <em>Submit</em> to create a custom button for all of your forms.</p>
<p>You might also want to modify the behavior of a Flex component.
For example, a <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/containers/VBox.html" target="_blank">VBox</a> container
lays out its children from the top of the container to the bottom in
the order in which you define the children within the container.
Instead, you might want to customize the VBox container to lay out
its children from bottom to top.</p>
<p>Another reason to customize a Flex component is to add logic
or behavior to it. For example, you might want to modify the <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/TextInput.html" target="_blank">TextInput</a> control
so that it supports a key combination to delete all the text entered
into the control. Or, you might want to modify a component so that
it dispatches a new event type when a user carries out an action. </p>
<p>
To create your own components,
you create subclasses from the <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/core/UIComponent.html" target="_blank">UIComponent</a> class,
or any other class in the Flex component hierarchy. For example,
if you want to create a component that behaves almost the same as
a Button component does, you can extend the Button class instead
of recreating all the functionality of the Button class from the
base classes. </p>
<p>Depending on the modifications that you want to make, you can
create a subclass of a Flex component in MXML or ActionScript. </p>
</div>
<div class="nested3" id="WS2db454920e96a9e51e63e3d11c0bf68268-7ffe_verapache"><a name="WS2db454920e96a9e51e63e3d11c0bf68268-7ffe_verapache"><!-- --></a>
<h4 class="topictitle4">The relationship between MXML components
and ActionScript components</h4>
<div>
<p>To create a custom component in ActionScript, you create
a subclass from a class in the Flex class hierarchy. The name of
your class (for example, MyASButton), must correspond to the name
of the ActionScript file; for example, MyASButton.as. The subclass
inherits all of the properties and methods of the superclass. In
this example, you use the <samp class="codeph">&lt;MyASButton&gt;</samp> tag
to reference it in MXML.</p>
<p>When you create a custom component in MXML, the Flex compiler
automatically creates an ActionScript class. The name of the MXML
file (for example, MyMXMLButton.mxml) corresponds to the ActionScript
class name. In this example, the ActionScript class is named MyMXMLButton,
and you use the <samp class="codeph">&lt;MyMXMLButton&gt;</samp> tag to reference
it in MXML.</p>
<p>The following example shows two components based on the Flex <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/components/Button.html" target="_blank">Button</a> component,
one defined in ActionScript and the other in MXML:</p>
<div class="figborder">
<img src="images/cci_ButtnComp_as_mxml.png" alt="Two components based on the Flex Button component, one defined in ActionScript and the other in MXML"/>
</div>
<p>Both implementations create a component as a subclass of the
Button class and, therefore, inherit all of the public and protected
properties, methods, and other elements of the Button class. Within
each implementation, you can override inherited items, define new
items, and add your custom logic. </p>
<div class="note"><span class="notetitle">Note:</span> You cannot override an inherited property defined
by a variable, but you can override a property defined by setter
and getter methods. You can reset the value of an inherited property
defined by a variable. You typically reset it in the constructor
of the subclass for an ActionScript component, or in an event handler
for an MXML component because MXML components cannot define a constructor. </div>
<p>However, when you use MXML, the Flex compiler performs most of
the overhead required to create a subclass of a component for you.
This makes it much easier to create components in MXML than in ActionScript. </p>
</div>
</div>
<div class="nested3" id="WS2db454920e96a9e51e63e3d11c0bf68268-7ffc_verapache"><a name="WS2db454920e96a9e51e63e3d11c0bf68268-7ffc_verapache"><!-- --></a>
<h4 class="topictitle4">Deciding to create components in
MXML or ActionScript</h4>
<div>
<p>One of the first decisions that you must make when creating
custom components is deciding whether to write them in MXML or in
ActionScript. Ultimately, it is the requirements of your application
that determine how you develop your custom component.</p>
<p>Some basic guidelines include the following: </p>
<ul>
<li>
<p>MXML components and ActionScript components both define
new ActionScript classes.</p>
</li>
<li>
<p>Almost anything that you can do in a custom ActionScript
custom component, you can also do in a custom MXML component. However,
for simple components, such as components that modify the behavior
of an existing component or add a basic feature to an existing component,
it is simpler and faster to create them in MXML.</p>
</li>
<li>
<p>When your new component is a composite component that contains
other components, and you can express the positions and sizes of
those other components using one of the Flex containers, you should
use MXML to define your component. </p>
</li>
<li>
<p>To modify the behavior of the component, such as the way
a container lays out its children, use ActionScript.</p>
</li>
<li>
<p>To create a visual component by creating a subclass from
UIComponent, use ActionScript.</p>
</li>
<li>
<p>To create a nonvisual component, such as a formatter, validator,
or effect, use ActionScript. </p>
</li>
<li>
<p>To add logging support to your control, use ActionScript.
For more information, see <a href="flx_logging_lg.html#WS2db454920e96a9e51e63e3d11c0bf69084-7ffc_verapache">Logging</a>.</p>
</li>
</ul>
<p>For more information on custom MXML components, see <a href="flx_mxmlcomponents_mxc.html#WS2db454920e96a9e51e63e3d11c0bf69084-7feb_verapache">Simple
MXML components</a>. For more information on ActionScript components,
see <a href="flx_ascomponents_as.html#WS2db454920e96a9e51e63e3d11c0bf69084-7fea_verapache">Create
simple visual components in ActionScript </a>.</p>
</div>
</div>
</div>
<div class="nested2" id="WS2db454920e96a9e51e63e3d11c0bf68268-7ff8_verapache"><a name="WS2db454920e96a9e51e63e3d11c0bf68268-7ff8_verapache"><!-- --></a>
<h3 class="topictitle3">Creating new components</h3>
<div>
<p>Your application might require you to create new components,
rather than modifying existing ones. To create components, you typically
create them in ActionScript by creating a subclass from the <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/core/UIComponent.html" target="_blank">UIComponent</a> class.
This class contains the generic functionality of all Flex components.
You then add the required functionality to your new component to
meet your application requirements. </p>
<p>For more information, see <a href="flx_ascomponents_advanced_asa.html#WS2db454920e96a9e51e63e3d11c0bf69084-7cdd_verapache">Create
advanced MX visual components in ActionScript</a>.</p>
</div>
</div>
</div>
<div class="nested1" id="WS2db454920e96a9e51e63e3d11c0bf68268-7ffb_verapache"><a name="WS2db454920e96a9e51e63e3d11c0bf68268-7ffb_verapache"><!-- --></a>
<h2 class="topictitle2">Creating custom components</h2>
<div>
<p>You create custom components as either MXML or ActionScript
files. </p>
</div>
<div class="nested2" id="WS2db454920e96a9e51e63e3d11c0bf68268-7ff7_verapache"><a name="WS2db454920e96a9e51e63e3d11c0bf68268-7ff7_verapache"><!-- --></a>
<h3 class="topictitle3">Creating MXML components</h3>
<div>
<p>Flex supplies the Spark <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/components/ComboBox.html" target="_blank">ComboBox</a> control
that you can use as part of a form that collects address information
from a customer. In the form, you can include a ComboBox control
to let the user select the state portion of the address from a list
of the 50 states in the U.S. In an application that has multiple
forms where a user can enter an address, it would be tedious to
create and initialize multiple ComboBox controls with the same information
about all 50 states.</p>
<p>Instead, you create an MXML component that contains a ComboBox
control with all the 50 states defined within in it. Then, wherever
you need to add a state selector to your application, you use your
custom MXML component. The following example shows a possible definition
for a custom ComboBox control:</p>
<pre class="noswf">&lt;?xml version="1.0"?&gt;
&lt;!-- createcomps_intro\StateComboBox.mxml --&gt;
&lt;!-- Specify the root tag and namespace. --&gt;
&lt;s:ComboBox xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"&gt;
&lt;s:dataProvider&gt;
&lt;s:ArrayList&gt;
&lt;fx:String&gt;AK&lt;/fx:String&gt;
&lt;fx:String&gt;AL&lt;/fx:String&gt;
&lt;!-- Add all other states. --&gt;
&lt;/s:ArrayList&gt;
&lt;/s:dataProvider&gt;
&lt;/s:ComboBox&gt;</pre>
<p>This example shows the following:</p>
<ol>
<li>
<p>The first line of the custom MXML component definition
specifies the declaration of the XML version.</p>
</li>
<li>
<p>The first MXML tag of the component, called its <em>root</em> tag,
specifies a Flex component or a custom component. MXML components
correspond to ActionScript classes, therefore, the root tag specifies
the superclass of the MXML component. In this example, the MXML
component specifies the Flex ComboBox control as its superclass. </p>
</li>
<li>
<p>The <samp class="codeph">xmlns</samp> properties in the root tag specifies
the Flex XML namespaces. In this example, the <samp class="codeph">xmlns</samp> property
indicates that tags in the MX namespace use the prefix <em>mx:</em>.</p>
</li>
<li>
<p>The remaining lines of the component specify its definition.</p>
</li>
</ol>
<p>The main application, or any other MXML component file, references
the StateComboBox component, as the following example shows:</p>
<pre class="codeblock">&lt;?xml version="1.0"?&gt;
&lt;!-- createcomps_intro/IntroMyApplication.mxml --&gt;
&lt;!-- Include the namespace definition for your custom components. --&gt;
&lt;s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:MyComp="*"&gt;
&lt;!-- Use the filename as the MXML tag name. --&gt;
&lt;MyComp:StateComboBox/&gt;
&lt;/s:Application&gt;</pre>
<p>The MXML tag name for a custom component is composed of two parts:
the namespace prefix, in this case <samp class="codeph">MyComp</samp>, and
the tag name. The namespace prefix tells Flex where to look for
the file that implements the custom component. The tag name corresponds
to the filename of the component, in this case StateComboBox.mxml.
Therefore, a file named StateComboBox.mxml defines a component with
the tag name of <samp class="codeph">&lt;</samp>
<em>namespace:</em>
<samp class="codeph">StateComboBox&gt;</samp>.</p>
<p>As part of the <samp class="codeph">&lt;s:Application&gt;</samp> tag, the
main application file includes the following namespace definition: <samp class="codeph">xmlns:MyComp="*"</samp>.
This definition specifies that the component is in the same directory
as the main application file, or in a directory included in the
ActionScript source path. For more information on deploying MXML
components, see <a href="flx_mxmlcomponents_mxc.html#WS2db454920e96a9e51e63e3d11c0bf69084-7feb_verapache">Simple
MXML components</a>.</p>
<p>The best practice is to put your custom components in a subdirectory
of your application. That practice helps to ensure that you do not
have duplicate component names because they have a different namespace.
If you stored your component in the myComponents subdirectory of
your application, you would specify the namespace definition as <samp class="codeph">xmlns:MyComp="myComponents.*"</samp>.</p>
<p>The StateComboBox.mxml file specifies the ComboBox control as
its root tag, so you can reference all of the properties of the
ComboBox control in the MXML tag of your custom component, or in
the ActionScript specified in an <samp class="codeph">&lt;fx:Script&gt;</samp> tag.
For example, the following example specifies the <samp class="codeph">ComboBox.maxChars</samp> property
and a listener for the <samp class="codeph">ComboBox.close</samp> event for
your custom control:</p>
<pre class="codeblock">&lt;?xml version="1.0"?&gt;
&lt;!-- createcomps_intro/MyApplicationProperties.mxml --&gt;
&lt;s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:MyComp="myComponents.*"&gt;
&lt;fx:Script&gt;
&lt;![CDATA[
import flash.events.Event;
private function handleCloseEvent(eventObj:Event):void {
// ...
}
]]&gt;
&lt;/fx:Script&gt;
&lt;MyComp:StateComboBox maxChars="25"
close="handleCloseEvent(event);"/&gt;
&lt;/s:Application&gt;</pre>
<p>For more information on MXML components, see <a href="flx_mxmlcomponents_mxc.html#WS2db454920e96a9e51e63e3d11c0bf69084-7feb_verapache">Simple
MXML components</a>. </p>
</div>
</div>
<div class="nested2" id="WS2db454920e96a9e51e63e3d11c0bf68268-7ff6_verapache"><a name="WS2db454920e96a9e51e63e3d11c0bf68268-7ff6_verapache"><!-- --></a>
<h3 class="topictitle3">Creating ActionScript components</h3>
<div>
<p>
You
create ActionScript components by defining ActionScript classes.
You can create the following types of components in ActionScript:</p>
<dl>
<dt class="dlterm">User-interface, or visual, components</dt>
<dd>
<p>
User-interface
components contain both processing logic and visual elements. You
create custom user-interface components to modify existing behavior
or add new functionality to the component. These components usually
extend the Flex component hierarchy. You can extend from the <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/core/UIComponent.html" target="_blank">UIComponent</a> class,
or any of the Flex components, such as <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/components/Button.html" target="_blank">Button</a>, <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/components/ComboBox.html" target="_blank">ComboBox</a>,
or <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/DataGrid.html" target="_blank">DataGrid</a>.
Your custom ActionScript component inherits all of the methods,
properties, events, styles, and effects of its superclass.</p>
</dd>
<dt class="dlterm">Nonvisual components</dt>
<dd>
<p>
Nonvisual
components define nonvisual elements. Flex includes several types
of nonvisual components that you can create, including formatters,
validators, and effects. You create nonvisual components by creating
a subclass from the Flex component hierarchy. For validators, you create
subclasses of the <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/validators/Validator.html" target="_blank">Validator</a> class;
for formatters you create subclasses of the <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/formatters/Formatter.html" target="_blank">Formatter</a> class;
and for effects, you create subclasses of the <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/effects/Effect.html" target="_blank">Effect</a> class.</p>
<p>For
example, you can define a custom button component based on the Spark <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/components/Button.html" target="_blank">Button</a> class,
as the following example shows: </p>
<pre class="noswf">package myComponents
{
// createcomps_intro/myComponents/MyButton.as
import spark.components.Button;
public class MyButton extends Button {
// Define the constructor.
public function MyButton() {
// Call the constructor in the superclass.
super();
// Set the label property to "Submit".
label="Submit";
}
}
}</pre>
<p>In this example, you write your MyButton class to
the MyButton.as file. </p>
<p>You must define your custom components
within an ActionScript package. The package reflects the directory
location of your component in the directory structure of your application.
Typically, you put custom ActionScript components in directories
that are in the ActionScript source path, subdirectories of your application,
or for Adobe<sup>®</sup> LiveCycle™ Data
Services ES, in the WEB-INF/flex/user_classes directory. In this
example, the <samp class="codeph">package</samp> statement specifies that the
MyButton.as file is in the myComponents subdirectory of your Flex
application. </p>
<p>In the MXML file that references the custom
component, you define the namespace and reference it in an MXML
file as the following example shows:</p>
<pre class="codeblock">&lt;?xml version="1.0"?&gt;
&lt;!-- createcomps_intro/MyApplicationASComponent.mxml --&gt;
&lt;!-- Include the namespace definition for your custom components. --&gt;
&lt;s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:MyComp="myComponents.*"&gt;
&lt;!-- Use the filename as the MXML tag name. --&gt;
&lt;MyComp:MyButton/&gt;
&lt;/s:Application&gt;</pre>
<p>In this example, you first
define the <samp class="codeph">MyComp</samp> namespace that specifies the location
of your custom component in the application’s directory structure.
You then reference the component as an MXML tag using the namespace
prefix. </p>
<p>For more information, see <a href="flx_ascomponents_as.html#WS2db454920e96a9e51e63e3d11c0bf69084-7fea_verapache">Create
simple visual components in ActionScript </a>.</p>
</dd>
</dl>
</div>
</div>
<div class="nested2" id="WS2db454920e96a9e51e63e3d11c0bf68268-7ff5_verapache"><a name="WS2db454920e96a9e51e63e3d11c0bf68268-7ff5_verapache"><!-- --></a>
<h3 class="topictitle3">Deploying components</h3>
<div>
<p>
When
you deploy your custom components as MXML or ActionScript files,
you typically deploy them in the same directory structure as your
application files, in a directory specified in the ActionScript
source path, or for LiveCycle Data Services ES, in the WEB-INF/flex/user_classes
directory.</p>
<p>For security reasons, you may decide not to deploy your custom
components as source code files. Alternatively, you can deploy your
components as SWC files or as part of a Runtime Shared Library (RSL). </p>
<p>A <em>SWC file</em> is an archive file for Flex components. SWC
files make it easy to exchange components among Flex developers.
You need only exchange a single file, rather than the MXML or ActionScript
files and images and other resource files. In addition, the SWF
file inside a SWC file is compiled, which means that the code is
hidden from casual view. </p>
<p>SWC files can contain one or more components and are packaged
and expanded with the PKZip archive format. You can open and examine
a SWC file using WinZip, JAR, or another archiving tool. However,
you should not manually change the contents of a SWC file, and you
should not try to run the SWF file that is in a SWC file outside
of a SWC file. </p>
<p>To create a SWC file, use the compc utility in the <em>flex_install_dir</em>/bin
directory. The compc utility generates a SWC file from MXML component
source files and/or ActionScript component source files. For more
information on compc, see <a href="flx_compilers_cpl.html#WS2db454920e96a9e51e63e3d11c0bf69084-7ffd_verapache">Flex compilers</a>.</p>
<p>
One way to reduce the size of your application’s
SWF file is by externalizing shared assets into stand-alone files
that can be separately downloaded and cached on the client. These
shared assets are loaded by any number of applications at run time,
but only need to be transferred to the client once. These shared files
are known as Runtime Shared Libraries or RSLs.</p>
<p>For more information, including information on how to create
an RSL file, see <a href="flx_rsl_rsl.html#WS2db454920e96a9e51e63e3d11c0bf69084-7fd1_verapache">Runtime
Shared Libraries</a>.</p>
<p/>
</div>
</div>
<p>Adobe, Adobe LiveCycle Data Services ES and Adobe Flash Platform are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries and are used by permission from Adobe. No other license to the Adobe trademarks are granted.</p>
</div>
</body>
</html>