I was working on a somewhat complex search interface for Salesforce.com using Flex. I needed to do some communication with Apex so I threw together a little demo to outline the basic functionality of a Flex app communicating with a Visualforce page via a Javascript callback.
You can run this example on my Developer Site.
< ? xml version = " 1.0 " encoding = " utf-8 " ? >
< mx : Application xmlns : mx = " http://www.adobe.com/2006/mxml "
layout = " absolute " alpha = " 1.0 "
width = " 300 " height = " 100 "
backgroundGradientAlphas = " [0,0,0,0] " backgroundColor = " #F3F3EC "
creationComplete = " init() " >
< mx : Script >
<! [ CDATA [
import flash . external . ExternalInterface ;
[ Bindable ]
// the name of the javascript function in the Visualforce page to be called
private var callbackFunction : String ;
// the dom id of the text field in the Visualforce page
private var domId : String ;
private function init (): void {
callbackFunction = this . parameters . callbackFunction ;
domId = this . parameters . domId ;
}
public function changeListener ( evt : Event ): void {
ExternalInterface . call ( this . callbackFunction , evt . currentTarget . text , this . domId );
}
]] >
< /mx:Script >
< mx : TextInput x = " 10 " y = " 10 " width = " 280 " change = " changeListener(event) " />
< mx : Text x = " 10 " y = " 40 " text = " Type some text in this box to update the value 
of the box below via Javascript callback.

 " width = " 280 " height = " 50 " />
< /mx:Application>
The Visualforce page that hosts the Flex app. There is a simple controller that just maintains the state of the "callbackText" property.
< apex : page controller = " FlexCallbackController " >
< script language = " JavaScript " type = " text/javascript " >
function updateHiddenValue ( value , eId ){
var e = document . getElementById ( eId );
e . value = value ;
}
< /script >
< apex : sectionHeader title = " Flex / Javascript Callback Example " />
< apex : form >
< apex : pageBlock id = " flexBlock " >
< apex : pageBlockSection title = " Flex Section " >
< apex : flash src = " {!$Resource.FlexCallback} "
width = " 300 " height = " 100 "
flashvars = " callbackFunction=updateHiddenValue&domId={!$Component.callbackSection.myField} " />
< /apex:pageBlockSection >
< apex : pageBlockSection title = " Javascript Callback Section " id = " callbackSection " >
< apex : inputText id = " myField " value = " {!callbackText} " />
< /apex:pageBlockSection >
< /apex:pageBlock >
< /apex:form >
< /apex:page>