- 浏览: 200652 次
- 性别:
- 来自: 苏州
文章分类
最新评论
23.5 使用Flex-Ajax Bridge技术控制Flex应用程序
上一小节中介绍在Flex中如何调用Ajax技术。反之,也可使用Ajax技术控制Flex应用程序。JavaScript程序通过Flex-Ajax Bridge技术可控制Flex应用程序组件及外观。本小节将为读者介绍Flex-Ajax Bridge技术的基础知识和使用方法。
23.5.1 Flex-Ajax Bridge技术简介
Flex-Ajax Bridge技术是Adobe公司提供的一种服务技术。此技术为Ajax技术和Flex技术建立起特殊的联系。通过Flex-Ajax Bridge技术可达到控制Flex应用程序的效果。例如,单击网页中的按钮,Flex应用程序中新增一个按钮组件。
Flex-Ajax Bridge技术包括一个“FABridge.as”文件和“FABridge.js”文件。“FABridge.as”文件中定义了Flex客户端的各种属性和方法。“FABridge.js”文件定义了JavaScript客户端的各种属性和方法。有关“FABridge.as”文件和“FABridge.js”文件的相关内容将在后续章节中介绍。
Flex-Ajax Bridge技术的源文件包含在Flex Builder 3.0或LiveCycle Data Service 2.5的安装路径下。具体位置为“Flex Builder 3.0安装路径\sdks\moxie\frameworks\javascript\fabridge”或“LiveCycle Data Service 2.5安装路径\resources\FABridge”。
Flex-Ajax Bridge技术使得Flex技术与Ajax技术的交互更加简单快捷。Flex-Ajax Bridge技术最大的特点是可控制Flex应用程序的组件外观,调用Flex应用程序中的方法和函数。
23.5.2 Flex-Ajax Bridge技术的运行原理
Flex-Ajax Bridge技术只包含两个源文件:“FABridge.as”文件和“FABridge.js”文件。通过定义两个不同客户端(Flex客户端和JavaScript客户端)的对应属性和方法,实现不同客户端间的相互调用。
“FABridge.as”类继承EventDispatcher类,同时实现IMXMLObject接口。其主要功能是存储各种Flex组件的属性和方法,为各种方法添加对应的调用名称。“FABridge.as”类中最重要的实现方法为initializeCallbacks方法。
以下是initializeCallbacks方法的定义代码。
public function initializeCallbacks():void
{
if (ExternalInterface.available == false)
{
return;
}
//为js_getRoot方法添加调用名称
ExternalInterface.addCallback("getRoot", js_getRoot);
//为js_getPropFromAS方法添加调用名称
ExternalInterface.addCallback("getPropFromAS", js_getPropFromAS);
//为js_setPropertyInAS方法添加调用名称
ExternalInterface.addCallback("setPropInAS", js_setPropertyInAS);
//为js_invokeMethod方法添加调用名称
ExternalInterface.addCallback("invokeASMethod", js_invokeMethod);
//为js_invokeFunction方法添加调用名称
ExternalInterface.addCallback("invokeASFunction", js_invokeFunction);
//为js_releaseASObjects方法添加调用名称
ExternalInterface.addCallback("releaseASObjects", js_releaseASObjects);
//为js_create方法添加调用名称
ExternalInterface.addCallback("create", js_create);
//为js_releaseNamedASObject方法添加调用名称
ExternalInterface.addCallback("releaseNamedASObject",js_releaseNamedASObject);
//为incRef方法添加调用名称
ExternalInterface.addCallback("incRef", incRef);
//为releaseRef方法添加调用名称
ExternalInterface.addCallback("releaseRef", releaseRef);
}
(57) ExternalInterface类的addCallback方法为指定函数添加调用名称。定义调用名称后就可在JavaScript中调用。例如,在JavaScript语言中使用“getRoot();”语句调用Flex程序中的js_getRoot方法。
(58) addCallback方法只定义调用名称,而不定义参数。所以在调用函数时,参数个数和顺序必须与Flex程序的方法的定义相同。例如,在JavaScript语言中使用“setPropInAS(21,’text’,’aaaaaa’);”语句调用Flex程序中的js_setPropertyInAS方法。
“FABridge.js”文件定义了JavaScript客户端的各种属性和方法。其主要功能是存储JavaScript客户端的属性和数据,并提供连接Flex-Ajax Bridge的接口方法。
使用Flex-Ajax Bridge技术连接Ajax和Flex程序的步骤如下所示。
在MXML文件中添加FABridge组件。
在添加FABridge组件前,需要将FABridge源文件(“bridge”文件夹)复制至工程路径下。
在MXML文件中添加FABridge组件的语法如下所示。
<fab:FABridge xmlns:fab="bridge.*" />
编译MXML文件。
按下Ctrl+F11快捷键,编译运行MXML程序。
新建HTML网页。
在新网页中添加对Flex应用程序(SWF文件)的引用。
Flex Builder 3在编译MXML文件时会自动生成SWF文件并嵌套于同名的HTML网页中。用户可将其中嵌套SWF文件的代码复制至新网页,但要注意SWF文件的位置。
网页中嵌套SWF文件的语法如下所示。
<object id='SWF程序id'
classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,5,0,0' height='高度值' width='宽度值'>
<param name='src' value='SWF程序路径’/>
<embed name='SWF程序id ' pluginspage='http://www.macromedia.com/go/ getflashplayer'
src='SWF程序路径' height='高度值' width='宽度值'/>
</object>
SWF程序id可任意。src参数指明SWF程序的路径。
以下代码嵌套了“main.swf”应用程序。
<object id='faa'
classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http: //download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,5,0,0' height='400' width='400'>
<param name='src' value='main.swf’/>
<embed name='faa' pluginspage='http://www.macromedia.com/go/ getflashplayer'
src='main.swf' height='400' width='400'/>
</object>
在object标签中添加flashvars变量。
flashvars变量用以存储Flex-Ajax Bridge实例的名称,是连接Flex应用程序的关键处。其语法如下所示。
<object …>
…
<param name='flashvars' value='bridgeName=Flex-Ajax Bridge实例的名称'/>
<embed … flashvars='bridgeName= Flex-Ajax Bridge实例的名称'/>
</object>
Flex-Ajax Bridge实例的名称可任意。
以下代码嵌套了“main.swf”应用程序,并添加flashvars变量。
<object id='faa'
classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http: //download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,5,0,0' height='400' width='400'>
<param name='flashvars' value='bridgeName=example'/>
<param name='src' value='main.swf’/>
<embed name='faa' pluginspage='http://www.macromedia.com/go/ getflashplayer'
src='main.swf' height='400' width='400' flashvars='bridgeName=example’/>
</object>
在网页中引用“FABridge.js”文件。
在<head>标签下使用<script>标签引用“FABridge.js”文件。
以下代码引用“FABridge.js”文件。
<head>
<script src="bridge\FABridge.js" ></script>
</head>
在JavaScript中调用Flex应用程序。
在完成上述六步后,可在JavaScript中调用Flex应用程序。其语法如下所示。
FABridge.flashvars变量值.root();
(59) flashvars变量存储了Flex-Ajax Bridge实例的名称。
(60) root方法是“FABridge.js”文件中定义的方法,指向“FABridge.as”文件的js_getRoot方法。
以下代码在JavaScript中调用Flex应用程序。
FABridge.example.root();
23.5.3 使用getCompenentID方法获取组件
Flex-Ajax Bridge技术中使用getCompenentID方法获取组件。getCompenentID并不是确定的方法名,而表示“get”字符串连接组件id字符串。例如,Flex应用程序中定义了名为“myPanel”的组件,那么获取该组件的方法名为“getMyPanel”。需要注意的是,组件id字符串的第一个字母大写。
以下代码使用getCompenentID方法获取组件“myButton”。
//MXML文件
…
<mx:Button id="myButton" label="test"/>
//HTML文件
…
<head>
<script src="bridge\FABridge.js"></script>
<script>
function tt()
{
var flexApp=FABridge.example.root(); //指向Flex应用程序
var btn=flexApp.getMyButton(); //获取组件“myButton”
}
</script>
</head>
<body>
<object id="fff"…>
<param name="flashvars" value="bridgeName=example">
<embed … flashvars="bridgeName=example"/>
</object>
</body>
23.5.4 使用getPropertyName方法获取属性值
getPropertyName方法用以获取组件的属性值。与getCompenentID方法一样,getPropertyName方法也不是确定的方法名,而是“get”字符串连接组件属性字符串。
在使用getCompenentID方法获取组件后,可使用getPropertyName方法获取组件属性。
以下代码使用getPropertyName方法获取按钮组件“myButton”的label属性。
var flexApp=FABridge.example.root(); //指向Flex应用程序
var btn=flexApp.getMyButton(); //获取组件“myButton”
alert(btn.getLabel()); //获取label属性值
与getCompenentID方法一样,组件属性字符串的第一个字母大写。
23.5.5 使用setPropertyName方法设置属性值
setPropertyName方法用以设置组件的属性值。与getCompenentID方法一样,setPropertyName方法也不是确定的方法名,而是“set”字符串连接组件属性字符串。
在使用getCompenentID方法获取组件后,可使用setPropertyName方法设置组件属性。其语法如下所示。
组件实例.set属性名(属性值);
以下代码使用setPropertyName方法更改按钮组件“myButton”的label属性。
var flexApp=FABridge.example.root(); //指向Flex应用程序
var btn=flexApp.getMyButton(); //获取组件“myButton”
btn.setLabel("rrrrrrrrrrrrrrrrr"); //设置组件的label属性
与getCompenentID方法一样,组件属性字符串的第一个字母大写。
23.5.6 为组件添加监听事件
Flex-Ajax Bridge技术也可为组件添加监听事件。其语法如下所示。
组件实例.addEventListenner("事件名",JavaScript中的处理函数名);
使用getCompenentID方法获取组件后,可直接调用组件的所有方法(包括addEventListenner方法)。
以下代码使用addEventListenner方法为按钮组件“myButton”添加单击事件的监听。
var flexApp=FABridge.example.root(); //指向Flex应用程序
var btn=flexApp.getMyButton(); //获取组件“myButton”
var callback=function()
{
alert("success");
}
btn.addEventListenner("click",callback);//为按钮组件“myButton”添加单击事件的监听
本程序说明通过Flex-Ajax Bridge技术可在JavaScript中处理Flex组件的事件。这样,可减少Flex应用程序的规模。
23.5.7 调用Flex程序中的函数
由于“FABridge.example.root()”语句指向的是Flex应用程序本身,所以可直接调用Flex程序的函数。
以下代码中调用了Flex程序中的test函数。
//MXML文件
function test():void
{
Alert.show("hello world");
}
//HTML文件
var flexApp=FABridge.example.root();
flexApp.test();
23.5.8 Flex-Ajax Bridge技术控制Flex程序实例
本实例的效果为:在网页中操作按钮或下拉框组件,Flex应用程序的视图变化。
Flex-Ajax Bridge技术控制Flex程序实例的步骤如下所示。
新建Flex工程“Flex-AjaxBridgeExample”。
在工程根目录中添加“bridge”文件夹。
“bridge”文件夹包含Flex-Ajax Bridge源文件。
在工程根目录中添加“image”文件夹。
“image”文件夹存放图片资源(本例中使用了图片组件)。
编写“main.mxml”文件。
“main.mxml”文件中定义了testAlert函数及可视化组件。
以下代码是“main.mxml”文件的MXML代码。
<?xml version="1.0" encoding="utf-8"?>
<mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute"xmlns:bridge="bridge.*"fontSize="13">
<mx:Script>
<![CDATA[
import mx.controls.Alert; //引用 Alert类
public function testAlert():void
{
Alert.show("Hello World!"); //提示"Hello World!"
}
]]>
</mx:Script>
<fab:FABridge xmlns:fab="bridge.*"/> <!--Flex-Ajax Bridge组件-->
<mx:Panel id="myPanel" width="400" height="350" verticalGap="1" title= "Flex-Ajax Bridge实例">
<mx:HBox width="100%" horizontalAlign="center">
<mx:VBox id="myVbox"/>
<!--图片组件-->
<mx:Image id="myImage" width="300" height="300" source="image/ dog.jpg"/>
</mx:HBox>
</mx:Panel>
</mx:Application>
“main.mxml”文件的外观效果如图23-10所示。
按下Ctrl+F11快捷键,编译运行程序。
在工程的“bin”文件夹下新建“FABridge Example.html”文件。
“FABridgeExample.html”文件中定义了一个“创建按钮”按钮和一个下拉框组件。单击“创建按钮”按钮,调用createFlexButton函数来为Flex应用程序新增一个按钮。更改下拉框组件数据时,调用selectChange函数修改Flex应用程序中的图片组件。
以下代码是“FABridgeExample.html”文件的定义代码。
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=”gb2312" />
<script src="bridge\FABridge.js" ></script>
<script language='javascript'>
function createFlexButton()//创建按钮处理函数
{
var flexApp=FABridge.example.root(); //通过FABridge指向Flex应用程序
//创建按钮
var btn=FABridge.example.create("mx.controls.Button");
btn.setWidth(70); //设置按钮宽度
btn.setHeight(25); //设置按钮高度
btn.setLabel("test"); //设置按钮标签
var callback=function() //定义callback函数
{
flexApp.testAlert(); //调用Flex应用程序的testAlert函数
alert("Hello"); //调用JavaScript的提示函数
}
btn.addEventListener("click",callback); //为按钮的单击事件添加处理函数
flexApp.getMyVbox().addChild(btn); //添加按钮到Flex应用程序
}
function selectChange() //下拉框数据变化处理函数
{
var flexApp=FABridge.example.root();//通过FABridge指向Flex应用程序
//设置Flex应用程序图片组件的source属性
flexApp.getMyImage().setSource(imgSelect.value);
}
</script>
<title>Flex-Ajax Bridge 实例</title>
</head>
<body>
<div >
<label>选择图片:</label>
<select name="imgSelect" onchange="selectChange()"> <!--下拉框-->
<option value="image\dog.jpg">dog.jpg</option>
<option value="image\fruit1.jpg">fruit1.jpg</option>
<option value="image\fruit2.jpg">fruit2.jpg</option>
<option value="image\flower.jpg">flower.jpg</option>
</select>
<br/><br />
<input type="button" onClick="createFlexButton()" value="创建按钮" />
</div>
<div>
<script>
document.write("<object
id='flexApp'
classid='clsid:D27CDB6E-AE6D-11cf-96B8- 444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/ flash/swflash.cab#version=8,5,0,0'
height='350' width='400'>");
document.write("<param name='flashvars' value='bridgeName= example'/>");
document.write("<param name='src' value='main.swf'/>");
document.write("<embed
name='flexApp'
pluginspage='http://www.macromedia.com/go/ getflashplayer'
src='main.swf' height='350' width='400'
flashvars='bridgeName=example'/>");
document.write("</object>");
</script>
</div>
</body>
</html>
(61) 要使用Flex-Ajax Bridge技术,有两处代码必不可少。一处为引用“FABridge.js”文件,一处为<object>标签中添加flashvars变量。
(62) 单击Flex应用程序中新增的按钮时,将调用Flex程序的testAlert函数和JavaScript语言中的alert函数。
保存“FABridgeExample.html”文件后,使用浏览器打开此文件。
实例运行前效果和运行后效果如图23-11、图23-12所示。
图23-11 实例运行前效果 图23-12 实例运行后效果
23.6 小结
本章以实例的形式介绍了一些Flex 3.0新特性的应用。由于本书篇幅有限,不能一一介绍新特性。但本章介绍的新特性均为实用的、有代表性的特性,包括加载PDF文件、使用本地SQL数据库、升级AIR应用程序、集成Ajax技术等。通过本章的学习,读者能了解并掌握Flex 3.0的一些新特性,从而开发出功能更加丰富的RIA应用程序。
你好,为什么我的使用Ajax Bridge 在Editplus中可以完成相应的功能,但是在IE中就报错呢?难道使用IE7.还有问题或者不支持?
不好意思 我对这个不了解 flex我一点都不了解
文章只是我转来的 留着以后学
上一小节中介绍在Flex中如何调用Ajax技术。反之,也可使用Ajax技术控制Flex应用程序。JavaScript程序通过Flex-Ajax Bridge技术可控制Flex应用程序组件及外观。本小节将为读者介绍Flex-Ajax Bridge技术的基础知识和使用方法。
23.5.1 Flex-Ajax Bridge技术简介
Flex-Ajax Bridge技术是Adobe公司提供的一种服务技术。此技术为Ajax技术和Flex技术建立起特殊的联系。通过Flex-Ajax Bridge技术可达到控制Flex应用程序的效果。例如,单击网页中的按钮,Flex应用程序中新增一个按钮组件。
Flex-Ajax Bridge技术包括一个“FABridge.as”文件和“FABridge.js”文件。“FABridge.as”文件中定义了Flex客户端的各种属性和方法。“FABridge.js”文件定义了JavaScript客户端的各种属性和方法。有关“FABridge.as”文件和“FABridge.js”文件的相关内容将在后续章节中介绍。
Flex-Ajax Bridge技术的源文件包含在Flex Builder 3.0或LiveCycle Data Service 2.5的安装路径下。具体位置为“Flex Builder 3.0安装路径\sdks\moxie\frameworks\javascript\fabridge”或“LiveCycle Data Service 2.5安装路径\resources\FABridge”。
Flex-Ajax Bridge技术使得Flex技术与Ajax技术的交互更加简单快捷。Flex-Ajax Bridge技术最大的特点是可控制Flex应用程序的组件外观,调用Flex应用程序中的方法和函数。
23.5.2 Flex-Ajax Bridge技术的运行原理
Flex-Ajax Bridge技术只包含两个源文件:“FABridge.as”文件和“FABridge.js”文件。通过定义两个不同客户端(Flex客户端和JavaScript客户端)的对应属性和方法,实现不同客户端间的相互调用。
“FABridge.as”类继承EventDispatcher类,同时实现IMXMLObject接口。其主要功能是存储各种Flex组件的属性和方法,为各种方法添加对应的调用名称。“FABridge.as”类中最重要的实现方法为initializeCallbacks方法。
以下是initializeCallbacks方法的定义代码。
public function initializeCallbacks():void
{
if (ExternalInterface.available == false)
{
return;
}
//为js_getRoot方法添加调用名称
ExternalInterface.addCallback("getRoot", js_getRoot);
//为js_getPropFromAS方法添加调用名称
ExternalInterface.addCallback("getPropFromAS", js_getPropFromAS);
//为js_setPropertyInAS方法添加调用名称
ExternalInterface.addCallback("setPropInAS", js_setPropertyInAS);
//为js_invokeMethod方法添加调用名称
ExternalInterface.addCallback("invokeASMethod", js_invokeMethod);
//为js_invokeFunction方法添加调用名称
ExternalInterface.addCallback("invokeASFunction", js_invokeFunction);
//为js_releaseASObjects方法添加调用名称
ExternalInterface.addCallback("releaseASObjects", js_releaseASObjects);
//为js_create方法添加调用名称
ExternalInterface.addCallback("create", js_create);
//为js_releaseNamedASObject方法添加调用名称
ExternalInterface.addCallback("releaseNamedASObject",js_releaseNamedASObject);
//为incRef方法添加调用名称
ExternalInterface.addCallback("incRef", incRef);
//为releaseRef方法添加调用名称
ExternalInterface.addCallback("releaseRef", releaseRef);
}
(57) ExternalInterface类的addCallback方法为指定函数添加调用名称。定义调用名称后就可在JavaScript中调用。例如,在JavaScript语言中使用“getRoot();”语句调用Flex程序中的js_getRoot方法。
(58) addCallback方法只定义调用名称,而不定义参数。所以在调用函数时,参数个数和顺序必须与Flex程序的方法的定义相同。例如,在JavaScript语言中使用“setPropInAS(21,’text’,’aaaaaa’);”语句调用Flex程序中的js_setPropertyInAS方法。
“FABridge.js”文件定义了JavaScript客户端的各种属性和方法。其主要功能是存储JavaScript客户端的属性和数据,并提供连接Flex-Ajax Bridge的接口方法。
使用Flex-Ajax Bridge技术连接Ajax和Flex程序的步骤如下所示。
在MXML文件中添加FABridge组件。
在添加FABridge组件前,需要将FABridge源文件(“bridge”文件夹)复制至工程路径下。
在MXML文件中添加FABridge组件的语法如下所示。
<fab:FABridge xmlns:fab="bridge.*" />
编译MXML文件。
按下Ctrl+F11快捷键,编译运行MXML程序。
新建HTML网页。
在新网页中添加对Flex应用程序(SWF文件)的引用。
Flex Builder 3在编译MXML文件时会自动生成SWF文件并嵌套于同名的HTML网页中。用户可将其中嵌套SWF文件的代码复制至新网页,但要注意SWF文件的位置。
网页中嵌套SWF文件的语法如下所示。
<object id='SWF程序id'
classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,5,0,0' height='高度值' width='宽度值'>
<param name='src' value='SWF程序路径’/>
<embed name='SWF程序id ' pluginspage='http://www.macromedia.com/go/ getflashplayer'
src='SWF程序路径' height='高度值' width='宽度值'/>
</object>
SWF程序id可任意。src参数指明SWF程序的路径。
以下代码嵌套了“main.swf”应用程序。
<object id='faa'
classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http: //download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,5,0,0' height='400' width='400'>
<param name='src' value='main.swf’/>
<embed name='faa' pluginspage='http://www.macromedia.com/go/ getflashplayer'
src='main.swf' height='400' width='400'/>
</object>
在object标签中添加flashvars变量。
flashvars变量用以存储Flex-Ajax Bridge实例的名称,是连接Flex应用程序的关键处。其语法如下所示。
<object …>
…
<param name='flashvars' value='bridgeName=Flex-Ajax Bridge实例的名称'/>
<embed … flashvars='bridgeName= Flex-Ajax Bridge实例的名称'/>
</object>
Flex-Ajax Bridge实例的名称可任意。
以下代码嵌套了“main.swf”应用程序,并添加flashvars变量。
<object id='faa'
classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http: //download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,5,0,0' height='400' width='400'>
<param name='flashvars' value='bridgeName=example'/>
<param name='src' value='main.swf’/>
<embed name='faa' pluginspage='http://www.macromedia.com/go/ getflashplayer'
src='main.swf' height='400' width='400' flashvars='bridgeName=example’/>
</object>
在网页中引用“FABridge.js”文件。
在<head>标签下使用<script>标签引用“FABridge.js”文件。
以下代码引用“FABridge.js”文件。
<head>
<script src="bridge\FABridge.js" ></script>
</head>
在JavaScript中调用Flex应用程序。
在完成上述六步后,可在JavaScript中调用Flex应用程序。其语法如下所示。
FABridge.flashvars变量值.root();
(59) flashvars变量存储了Flex-Ajax Bridge实例的名称。
(60) root方法是“FABridge.js”文件中定义的方法,指向“FABridge.as”文件的js_getRoot方法。
以下代码在JavaScript中调用Flex应用程序。
FABridge.example.root();
23.5.3 使用getCompenentID方法获取组件
Flex-Ajax Bridge技术中使用getCompenentID方法获取组件。getCompenentID并不是确定的方法名,而表示“get”字符串连接组件id字符串。例如,Flex应用程序中定义了名为“myPanel”的组件,那么获取该组件的方法名为“getMyPanel”。需要注意的是,组件id字符串的第一个字母大写。
以下代码使用getCompenentID方法获取组件“myButton”。
//MXML文件
…
<mx:Button id="myButton" label="test"/>
//HTML文件
…
<head>
<script src="bridge\FABridge.js"></script>
<script>
function tt()
{
var flexApp=FABridge.example.root(); //指向Flex应用程序
var btn=flexApp.getMyButton(); //获取组件“myButton”
}
</script>
</head>
<body>
<object id="fff"…>
<param name="flashvars" value="bridgeName=example">
<embed … flashvars="bridgeName=example"/>
</object>
</body>
23.5.4 使用getPropertyName方法获取属性值
getPropertyName方法用以获取组件的属性值。与getCompenentID方法一样,getPropertyName方法也不是确定的方法名,而是“get”字符串连接组件属性字符串。
在使用getCompenentID方法获取组件后,可使用getPropertyName方法获取组件属性。
以下代码使用getPropertyName方法获取按钮组件“myButton”的label属性。
var flexApp=FABridge.example.root(); //指向Flex应用程序
var btn=flexApp.getMyButton(); //获取组件“myButton”
alert(btn.getLabel()); //获取label属性值
与getCompenentID方法一样,组件属性字符串的第一个字母大写。
23.5.5 使用setPropertyName方法设置属性值
setPropertyName方法用以设置组件的属性值。与getCompenentID方法一样,setPropertyName方法也不是确定的方法名,而是“set”字符串连接组件属性字符串。
在使用getCompenentID方法获取组件后,可使用setPropertyName方法设置组件属性。其语法如下所示。
组件实例.set属性名(属性值);
以下代码使用setPropertyName方法更改按钮组件“myButton”的label属性。
var flexApp=FABridge.example.root(); //指向Flex应用程序
var btn=flexApp.getMyButton(); //获取组件“myButton”
btn.setLabel("rrrrrrrrrrrrrrrrr"); //设置组件的label属性
与getCompenentID方法一样,组件属性字符串的第一个字母大写。
23.5.6 为组件添加监听事件
Flex-Ajax Bridge技术也可为组件添加监听事件。其语法如下所示。
组件实例.addEventListenner("事件名",JavaScript中的处理函数名);
使用getCompenentID方法获取组件后,可直接调用组件的所有方法(包括addEventListenner方法)。
以下代码使用addEventListenner方法为按钮组件“myButton”添加单击事件的监听。
var flexApp=FABridge.example.root(); //指向Flex应用程序
var btn=flexApp.getMyButton(); //获取组件“myButton”
var callback=function()
{
alert("success");
}
btn.addEventListenner("click",callback);//为按钮组件“myButton”添加单击事件的监听
本程序说明通过Flex-Ajax Bridge技术可在JavaScript中处理Flex组件的事件。这样,可减少Flex应用程序的规模。
23.5.7 调用Flex程序中的函数
由于“FABridge.example.root()”语句指向的是Flex应用程序本身,所以可直接调用Flex程序的函数。
以下代码中调用了Flex程序中的test函数。
//MXML文件
function test():void
{
Alert.show("hello world");
}
//HTML文件
var flexApp=FABridge.example.root();
flexApp.test();
23.5.8 Flex-Ajax Bridge技术控制Flex程序实例
本实例的效果为:在网页中操作按钮或下拉框组件,Flex应用程序的视图变化。
Flex-Ajax Bridge技术控制Flex程序实例的步骤如下所示。
新建Flex工程“Flex-AjaxBridgeExample”。
在工程根目录中添加“bridge”文件夹。
“bridge”文件夹包含Flex-Ajax Bridge源文件。
在工程根目录中添加“image”文件夹。
“image”文件夹存放图片资源(本例中使用了图片组件)。
编写“main.mxml”文件。
“main.mxml”文件中定义了testAlert函数及可视化组件。
以下代码是“main.mxml”文件的MXML代码。
<?xml version="1.0" encoding="utf-8"?>
<mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute"xmlns:bridge="bridge.*"fontSize="13">
<mx:Script>
<![CDATA[
import mx.controls.Alert; //引用 Alert类
public function testAlert():void
{
Alert.show("Hello World!"); //提示"Hello World!"
}
]]>
</mx:Script>
<fab:FABridge xmlns:fab="bridge.*"/> <!--Flex-Ajax Bridge组件-->
<mx:Panel id="myPanel" width="400" height="350" verticalGap="1" title= "Flex-Ajax Bridge实例">
<mx:HBox width="100%" horizontalAlign="center">
<mx:VBox id="myVbox"/>
<!--图片组件-->
<mx:Image id="myImage" width="300" height="300" source="image/ dog.jpg"/>
</mx:HBox>
</mx:Panel>
</mx:Application>
“main.mxml”文件的外观效果如图23-10所示。
按下Ctrl+F11快捷键,编译运行程序。
在工程的“bin”文件夹下新建“FABridge Example.html”文件。
“FABridgeExample.html”文件中定义了一个“创建按钮”按钮和一个下拉框组件。单击“创建按钮”按钮,调用createFlexButton函数来为Flex应用程序新增一个按钮。更改下拉框组件数据时,调用selectChange函数修改Flex应用程序中的图片组件。
以下代码是“FABridgeExample.html”文件的定义代码。
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=”gb2312" />
<script src="bridge\FABridge.js" ></script>
<script language='javascript'>
function createFlexButton()//创建按钮处理函数
{
var flexApp=FABridge.example.root(); //通过FABridge指向Flex应用程序
//创建按钮
var btn=FABridge.example.create("mx.controls.Button");
btn.setWidth(70); //设置按钮宽度
btn.setHeight(25); //设置按钮高度
btn.setLabel("test"); //设置按钮标签
var callback=function() //定义callback函数
{
flexApp.testAlert(); //调用Flex应用程序的testAlert函数
alert("Hello"); //调用JavaScript的提示函数
}
btn.addEventListener("click",callback); //为按钮的单击事件添加处理函数
flexApp.getMyVbox().addChild(btn); //添加按钮到Flex应用程序
}
function selectChange() //下拉框数据变化处理函数
{
var flexApp=FABridge.example.root();//通过FABridge指向Flex应用程序
//设置Flex应用程序图片组件的source属性
flexApp.getMyImage().setSource(imgSelect.value);
}
</script>
<title>Flex-Ajax Bridge 实例</title>
</head>
<body>
<div >
<label>选择图片:</label>
<select name="imgSelect" onchange="selectChange()"> <!--下拉框-->
<option value="image\dog.jpg">dog.jpg</option>
<option value="image\fruit1.jpg">fruit1.jpg</option>
<option value="image\fruit2.jpg">fruit2.jpg</option>
<option value="image\flower.jpg">flower.jpg</option>
</select>
<br/><br />
<input type="button" onClick="createFlexButton()" value="创建按钮" />
</div>
<div>
<script>
document.write("<object
id='flexApp'
classid='clsid:D27CDB6E-AE6D-11cf-96B8- 444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/ flash/swflash.cab#version=8,5,0,0'
height='350' width='400'>");
document.write("<param name='flashvars' value='bridgeName= example'/>");
document.write("<param name='src' value='main.swf'/>");
document.write("<embed
name='flexApp'
pluginspage='http://www.macromedia.com/go/ getflashplayer'
src='main.swf' height='350' width='400'
flashvars='bridgeName=example'/>");
document.write("</object>");
</script>
</div>
</body>
</html>
(61) 要使用Flex-Ajax Bridge技术,有两处代码必不可少。一处为引用“FABridge.js”文件,一处为<object>标签中添加flashvars变量。
(62) 单击Flex应用程序中新增的按钮时,将调用Flex程序的testAlert函数和JavaScript语言中的alert函数。
保存“FABridgeExample.html”文件后,使用浏览器打开此文件。
实例运行前效果和运行后效果如图23-11、图23-12所示。
图23-11 实例运行前效果 图23-12 实例运行后效果
23.6 小结
本章以实例的形式介绍了一些Flex 3.0新特性的应用。由于本书篇幅有限,不能一一介绍新特性。但本章介绍的新特性均为实用的、有代表性的特性,包括加载PDF文件、使用本地SQL数据库、升级AIR应用程序、集成Ajax技术等。通过本章的学习,读者能了解并掌握Flex 3.0的一些新特性,从而开发出功能更加丰富的RIA应用程序。
评论
3 楼
走山涉水
2010-08-11
资料不错,正好解决问题。
2 楼
寒星2009
2009-06-12
flyeagle 写道
你好,为什么我的使用Ajax Bridge 在Editplus中可以完成相应的功能,但是在IE中就报错呢?难道使用IE7.还有问题或者不支持?
不好意思 我对这个不了解 flex我一点都不了解
文章只是我转来的 留着以后学
1 楼
flyeagle
2009-06-12
你好,为什么我的使用Ajax Bridge 在Editplus中可以完成相应的功能,但是在IE中就报错呢?难道使用IE7.还有问题或者不支持?
发表评论
-
Flex远程调用机制RemoteObject应用技巧
2009-07-15 17:52 1294本文主要讨论Flex在客户端与J2EE中间层数据交互的过程。 ... -
Flex RemoteObject类参考
2009-07-15 17:46 1020<mx:RemoteObject>标记允许使用AM ... -
Flex与Java的整合
2009-07-15 16:07 1437整合Flex和Java—配置篇 Author:yongtre ... -
Flex与JavaScript的交互:调用与被调用
2009-04-16 13:50 1037一、在JavaScript中调用Fle ... -
flex3.0新特性(2)---升级AIR应用程序, Flex 3.0中使用Ajax技术
2009-04-14 13:52 257723.3 升级AIR应用程序 AIR桌面应用程序可导出为ai ... -
flex3.0新特性(1)----本地资源的操作,如加载PDF文件,对本地数据库的操作
2009-04-14 11:12 2613Flex 3.0中最大的变化在于新增AIR工程。AIR应用程序 ... -
FABridge
2009-04-14 10:38 2800使用方法: 解释: 1. 由于swf(基 ... -
学习Flex的超好网站
2009-04-09 16:31 803http://www.airia.cn
相关推荐
这个"Flex-Ajax Bridge demo源码"是用于展示如何利用该技术实现在Flex和Ajax应用之间交互的实际代码示例。 在Flex-Ajax Bridge中,主要涉及以下几个关键知识点: 1. **Flex**:Flex是由Adobe开发的一种开放源码...
这种技术对于构建高度集成的Web应用非常重要,特别是在需要利用Flex的富客户端特性和Ajax的异步数据交换能力时。 **Flex-AjaxBridge源文件的位置:** - 如果您使用的是FlexBuilder 3.0,则Flex-AjaxBridge的源文件...
- **Flex3 新特性**: - 加载 PDF 文件。 - 使用本地 SQL 数据库。 - Flex3.0 中的 Ajax 技术。 - Flex-Ajax Bridge 控制技术。 #### 七、实例篇 - **FLV 播放器**:基于 Flex 构建视频播放功能。 - **...
2. **建立通信通道**:在Flex应用中,你需要创建一个Bridge实例,通常在Application的初始化阶段完成。在JavaScript端,也需要创建一个对应的Bridge实例,两者通过相同的命名空间进行匹配,建立起通信的桥梁。 3. *...
Adobe Flex Ajax Bridge (FABridge) 是一个关键工具,它为开发者提供了一种无缝集成 Flex 与 Ajax 内容的途径。通过 FABridge,ActionScript(Flex 的编程语言)和 JavaScript 之间可以进行双向通信,使得 Flash ...
- **Flex Ajax Bridge**:解释了如何利用 Flex Ajax Bridge 在 Flex 应用和服务器之间进行高效通信。 - **与包装器通信**:讲解了如何通过包装器与其他外部系统集成。 - **运行时共享库**:阐述了运行时共享库的概念...
本章节将带领读者初步了解Adobe Flex 2平台,包括其核心特性、架构以及与Flex 1.x版本的区别。通过这一章节的学习,读者可以对Flex 2有一个全面的认识,为后续的深入学习打下基础。 #### 第2章 - Introducing Flex...
- **Ajax集成**:Flex应用可以利用JavaScript与服务器进行异步通信,比如使用XMLHttpRequest对象进行Ajax请求,获取或发送数据。 - **安全考虑**:由于涉及跨域通信,需要注意安全问题,如防止XSS攻击和CSRF攻击,...
flex解析浏览器地址,。与浏览器的通信能够让 你建立一个可以超越Flex 应用本身的应用程序...的工具——Adobe Flex Ajax Bridge (FABridge)和Joe Berkovitz 的UrlKit 之类的,但是本章旨 在说明Flex 核心框架里的功能。
在本教程的第七部分,我们将会深入探讨 Flex-Ajax Bridge(FABridge)技术,这是一种允许 JavaScript 与 Flex 应用程序进行交互的服务。 FABridge 的核心在于两个文件:`FABridge.as` 和 `FABridge.js`。`FABridge....
- **Flex Ajax Bridge**:Flex Ajax Bridge提供了一种机制,使Flex应用程序能够与JavaScript代码进行通信,从而实现与HTML页面的无缝集成。 - **运行时共享库**:运行时共享库(RSL)是一种优化机制,允许开发者将常用...
- **Flex Ajax Bridge**:介绍了一个特殊的API,用于实现Flex与JavaScript之间的通信。 - **与包装器通信**:讲解了如何与Flex应用的HTML包装器进行交互。 - **运行时共享库**:讨论了如何使用运行时共享库来优化...
- **Flex Ajax Bridge**:这是一个允许Flex与JavaScript进行通信的机制,使得Flex可以利用HTML页面中的JavaScript库。 ### 构建用户界面 Flex 4.6 在构建用户界面方面提供了丰富的功能和组件: - **视觉组件**:...
Flex以其强大的图形用户界面(GUI)构建能力和ActionScript 3.0的支持,为开发者提供了丰富的功能。在此,我们主要探讨的是Flex中的Cairngorm框架以及FABridge库的使用,并通过一个名为FABridgeDemo的实例来深入理解...
非常全的flex 学习文档 目录 第 1 章 : 关于 Flash Builder 使用 Flash Builder 可以完成的工作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
flash中的socket和xmlsocket可以实现真正的双向通信,通过 flex ajax bridge,可以在javascript中使用这两项功能. 可以预见,如果websocket一旦在浏览器中得到实现,将会替代上面两项技术,得到广泛的使用.面对这种状况...