Flexcoders Frequently Asked Questions
                      Last Updated: 30th May 2005
    ------------------------------------------------------------------------
                             Contributors:

Matt Chotin, Steven Webster, Alistair McLeod, Tariq Ahmed, Jeff Tapper,
 Peter Farland, Abdul Qabiz, Tracy Spratt, Jesse Warden, Dan Harfleet,
                  Manish Jethani, Dimitrios Gianninas


1. What is Flexcoders?
2. How does Flexcoders relate to the Macromedia Flex Forum on
   www.macromedia.com?
3. Who posts to Flexcoders?
4. Resources to check before asking a question
5. Guidelines for effective question-asking
6. FAQ


1. What is Flexcoders?

Flexcoders is a forum where developers can ask questions about Flex,
FlexBuilder, and Flex-related technologies (like Cairngorm, FlexUnit and
SynergyFLEX).  The community is made up of everyday Flex developers as
well as Macromedia employees. However, this is not an official
Macromedia-sponsored forum, it is actually moderated by the folks at
iteration::two, a consultancy responsible for authoring the book
Developing Rich Internet Applications with Macromedia Flex.


2. How does Flexcoders relate to the Macromedia Flex Forum on
   www.macromedia.com?

Both the Macromedia Flex Forum and Flexcoders provide help on issues
related to Flex, and neither is an official support mechanism.  Some
people monitor both forums, some only one.  It is up to you to decide
where you might have a better experience getting a question answered and
being able to subsequently help others.


3. Who posts to Flexcoders?

Everyone who has a question or an answer.  Many members of the Flex
development team read and respond to Flexcoders as well as other
Macromedia folks who monitor the community.

Some recurring Macromedia folks are:

David Mendels: EVP and GM, highest-level executive in charge of Flex.
Lucian Beebe: Sr. Product Manager, Flex. Matt Chotin, Manish Jethani,
Abdul Qabiz, Gordon Smith, Peter Farland and many more: Engineers on
Flex.

Active community members include:

Steven Webster (Technical Director at iteration::two and co-author of
Developing Rich Clients with Macromedia Flex), Alistair McLeod
(Development Director at iteration::two and co-author of Developing Rich
Clients with Macromedia Flex), Jesse Warden (JesterXL - Flash badass
playing with Flex), Tracy Spratt (long-time member, holder of all
knowledge related to 32K limits), Jeff Steiner (maintainer of
www.flexauthority.com), Tariq Ahmed (maintainer of www.cflex.net), Jimmy
Gianninas (long-time member, developer at Optimal Payments).

And so many more!


4. Resources to check before asking a question

The Flexcoders Mail Archive (better searching than YahooGroups):
http://www.mail-archive.com/flexcoders%40yahoogroups.com

http://www.cflex.net/showfaq.cfm
http://livedocs.macromedia.com/flex/15/asdocs_en/index.html
http://www.macromedia.com/go/flex15_java_livedocs
http://www.macromedia.com/cfusion/knowledgebase/index.cfm
http://www.cflex.net http://www.flexauthority.com
http://www.macromedia.com/devnet/flex http://coenraets.com
http://weblogs.macromedia.com/mxna/ http://www.google.com 

The Book "Developing Rich Clients with Macromedia Flex" (check your
favorite bookstore)



5. Guidelines to effective question-asking

Include a useful subject; this will help people find their own questions
and answers later.

Explain what you are trying to accomplish.

Explain the error (include compilation errors or a description of the
runtime behavior).

Be prepared to break your problem down into a simpler scenario in case
someone wants to try to debug the code themselves.  Remember, private
web services are inaccessible; you may need to create some dummy data to
emulate problems.

Phrases to avoid:

"URGENT" (we all have deadlines, no one is intentionally delaying a
response to you)

"Please send code" (this is very frustrating to read as it implies you
aren't interested in learning anything on your own.  Where code is
appropriate you can expect someone to provide it, but in many cases you
will learn more by doing it on your own with appropriate guidance.  It
may be that you're on a deadline and just want to finish, but many of
those who respond regularly would prefer to "teach you to fish" so that
you can answer your own questions next time and even help out others).


6. Mini-FAQ



Q: Can I mail Matt, Manish, Abdul, Pete, Gordon, iteration::two, or
anyone else for that matter off-line with my question?

A: Please don't!  If someone is capable of answering your question on-
list please believe that it will be done.  Everyone on the list has
full-time jobs doing their own work and often answer flexcoders on their
own time; mailing them off- list doesn’t endear you to them.  If no one
answers on-list in a reasonable amount of time (24 hours) you can try to
rephrase the question and perhaps include more detail (including a
version of the problem that someone can run without doing any setup on
their own machine).

------------------------------------------------------------------------

Q: When is Flex 2.0 coming out, what will be in Flex 2.0?

A: Macromedia has not announced the schedule for Flex 2.  Details of the
release are expected to come in the next few months, but for now there
is no real public information about features or anything else.

------------------------------------------------------------------------

Q: What does "Branch between ... and ... around line ... exceeds 32K
span" mean and how do I get rid of it?

A: Don't panic.  Your app is NOT too big for Flex to handle. True, the
32k limit is a real Flash Player limitation to the size of certain
structures like if blocks and for loops.  But you don't really care
about that right now, because you don't have any direct control over
those things.  Here is some information that will help you get back to
coding:

There are two main reasons you might the 32k issue.  The primary cause,
and the one to address first, is the architecture of your application
code.  The 32k error message asks you to "refactor" your code.
Refactoring is essentially the process of modifying the structure of
your source code while keeping the same functionality.  In the Flex
world, this means moving some parts of the code  out of a main file and
into separate components.  One way to do this is to use custom mxml
components.  So instead of, say, having several hundred lines of mxml in
a child container of a ViewStack, you put that mxml code into its own
component file, and have a single line in the ViewStack to reference it.
Do that for all the ViewStack children and 1000 lines of code can become
30. Decreasing the total number of visually rendered mxml tags in a
single file will help avoid the 32k limit. Another type of refactoring
is to move ActionScript code into its own class. Important note! Just
putting the AS code into a file and then using the #include directive or
the <mx:Script source="filename"> to include the code will NOT help with
the 32k problem.  You MUST create a true AS class that contains the
functionality.  Around two thousand lines of mixed mxml and AS code and
you are in danger of the 32k error.  I have not found an upper limit
whatsoever to  code length in a class.

The second cause of the 32k error is not your fault.  During compile,
Flex generates AS code out of your mxml source.  Then it compiles that
into the Flash swf.  In that process it makes decisions on how to break
up your source and generate the AS class code.  In Flex version 1.5, it
doesn't always make the right decision, and the result is the 32k error.
IF you are confident that you app is already efficiently "refactored",
and you suspect you might be at one of these boundary conditions, first
try compiling the app with ?debug="true" in the url.  If the app
compiles, then you are surely at a boundary condition.  What is
happening is that debug adds code to your source during
generate/compile.  This additional code causes Flex to change the
structure of the AS classes so that the 32k limit is not hit.  Hmm, more
code?  Yeah.  Try just adding 50 or so lines of code, even if it is
bogus.  Usually, this will get you working.  Now, when you add more real
code go on and remove the bogus stuff, you don't want it in your
production code!

A final hint.  After hitting a 32k error, and trying one of the above
solutions, if you still get the error, delete the temporary generated as
code.  It is located in ..\MyAppServer\flex(flexroot or contextroot)
\WEB- INF\flex\generated\*.  You can delete all the folders safely (make
sure to restart your Flex server).

This can be an aggravating and somewhat scary problem, and it always
seems to happen just before an important demo.  Just use good, modular
design, and remember the bogus code trick.  Macromedia has stated a
committment to improving this situation in the next release.

------------------------------------------------------------------------

Q: What does "Warning: Changes to unknown property, ..., will not be
detected" mean and how do I get rid of it?

A: Generally speaking, binding needs type information to set up its
change detection functionality, and anything that hides this info can
cause this problem.  Don't use
mx.core.application.application.myVariable in binding.  If you are
passing a reference to some component into another component via public
properties, type the property variable definition as specifically as
possible. When using "dot.down" notation to specify a property in an
object or model, cast it to a type:
text="{String(myObject.whatever.firstName)}"

------------------------------------------------------------------------

Q: Is there a Rich Text Editor?

A: With the current Flex 1.5 component set, there is no Rich Text Editor
unfortunately.  There are some limitations in the current Flash Player
that make such an editor difficult though there are implementations out
there people have used.  Macromedia has heard many requests for a Rich
Text Editor and has indicated there might be better support in a future
release.

------------------------------------------------------------------------

Q: How to run Flex as a Service?

A: Flex is not a server that you deploy and run, it is simply deployed
as part of your web application. So whatever web container you are
using, either Tomcat, JRun 4, WebLogic, etc... so long as you can run
any of those as services, then it will work. To learn how to deploy
Tomcat, JRun 4 or any other Java server as a service, please refer to
the appropriate documentation for the server you are using.

------------------------------------------------------------------------

Q: Does Flex work on my platform?

A: Probably, search the archives if you have a specific question about
your platform before posting to the list.

------------------------------------------------------------------------

Q: How do I get Flex to query my database?

A: Flex does not have any native database integration functionality. you
will require some server-side tier that will do the database access and
send the data back to Flex via one of three protocols:

* RemoteObjects: Fastest. communicates with server side EJB's or POJOs using
  AMF, a binary, compressed format.
* HTTPService: uses HTTP protocol. Sources can be JSP, ASPx,.NET, files, any url
  that returns HTTP.
* WebService: Slowest. Uses SOAP protocol. Sources can be .Net, or any
  WebService.
  
------------------------------------------------------------------------

Q: I'm sending my request, and I see the data traffic in the command
window, but the result is always empty.

A: You are probably trying to read the result immediately after the
send(), right, expecting synchronous behavior?  You can't do this. See
"How do I make synchronous data calls?"

------------------------------------------------------------------------

Q: How do I make synchronous data calls?

A: You CANNOT do synchronous calls. You MUST use the result event. No,
you can't use a loop, or setInterval or even doLater.  This paradigm is
quite aggravating at first. Take a deep breath, surrender to the
inevitable, resistance is futile.

There is a generic way to handle the asynchronous nature of data service
calls called ACT (Asynchronous Call Token). Search for this in
Developing Flex Apps doc for a full description, but here it is in a
nutshell. This example uses HTTPService but will be similar for
RemoteObject and WebService:

* First, create a function to handle the data return, like "onResult()"
* In the HTTPService tag, put this function name in the "result" property,
  passing in event. <mx:HTTPService id="mxdsGetData" result="onResult(event)"
  ...>
* Invoke the call in script:
  //invokes the call to the HTTP data service
  var oRequestCallbject = app.mxdsGetData.send(oRequest);
  //we will use this string value in the result handler.
  //Yes, you CAN set this AFTER you invoke send()
  oRequestCall.MyQueryId = "WhateverIWanttoUseToIdentifyThisCall" ;
* In the result handler, which will be called every time the data service call
  returns, you identify what the returned data contains like this:
  var callResponse = oEvent.call; //get the call object
  //gets the value of this property you set in the call
  var sQueryId = callResponse.MyQueryId;
  //will be "WhateverIWanttoUseToIdentifyThisCall";
  trace(sQueryId);

  You can use this sQueryId value in a switch to do the correct
  processing. Alternatively, you can pass reference to a handler
  function directly.

------------------------------------------------------------------------

Q: When I have only a single record, it does not display in my DataGrid

A: This is a known issue that is caused by Flex's inability to
differentiate between an object and an array with a single row. the
solution is to ALWAYS use "toArray()". Here are some examples:

In MXML:
        <mx:DataProvider>
{mx.utils.ArrayUtil.toArray(modelAccidents1.accidents.accident)}
        </mx:DataProvider>

And the inline format:

dataProvider={mx.utils.ArrayUtil.toArray(testSrv.result.result.error)}

And in ActionScript:
        myControl.dataProvider =
mx.utils.ArrayUtil.toArray(testSrv.result.result.error)

------------------------------------------------------------------------

Q: I have two alerts in my code, but they are displaying in reverse!

A: Actually, it is worse that that.  Alerts, and "Modal" pop-up windows
are not truly modal.  They prevent user interaction with the interface,
but they do NOT block code execution.  What is happening is that both
alerts are displaying, and the second one is on top of the first.  The
way to get the behavior you want is to use events and handlers.  Your
code must display the alert or modal pop-up, the end.  When the user
dismisses the prompt, you then complete the processing. You should be
able to find some examples if this on one of the sites listed in
"Resources"

------------------------------------------------------------------------

Q: The columns in my DataGrid are in some strange order!

A: The order is typically the reverse of the order in which they were
added.  If you need a specific order, specify that and many other good
things by using DataGridColumn tags.  See the docs.

------------------------------------------------------------------------

Q: Can I embed HTML in my Flex application?

A: Flex supports a limited subset of HTML in its TextArea and some other
text- related classes.  There is also a new article by Christophe on his
blog discussing how to fake HTML with an IFRAME (
http://coenraets.com/viewarticle.jsp?articleId=95).

------------------------------------------------------------------------

Q: How can I make FlexBuilder faster?

A: In order to improve FlexBuilder performance, it is best to disable
the "Design View". This can only be done in FlexBuilder 1.5 and to do
so, please follow these steps:

* Select "Preferences" under the "Edit" menu 
* In the "General" section, remove the check mark next to 
  Enable MXML Design View" 
* click on "OK"

------------------------------------------------------------------------

Q: Flex Builder debug does not stop at breakpoints in components

A: The safest way to set breakpoints in component files is to use the
Files list. Start the debugging session, nav you app to where you want
to start debugging. Click the "Files" button on the Debug Toolbar, or go
Menu Debug\Files.  Select the component you want, usually the .mxml or
.as files. The list strips out underscores in filenames, and can be very
long, but this method always works.  FB will open a temporary file, set
the breakpoints, and away you go.

------------------------------------------------------------------------

Q: Are there frameworks available for Flex?

A: Yep!
Cairngorm: http://www.iterationtwo.com/open_source_cairngorm.html
FlexUnit: http://www.iterationtwo.com/open_source_flexunit.html
SynergyFLEX: http://www.mossyblog.com/archives/473.cfm (this link is for 1.0.0a)

------------------------------------------------------------------------

Q: When will Flex for .NET be available?

A: Macromedia has not announced a date.

// END


 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/flexcoders/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 



Reply via email to