AS 与 JS 交互

1 篇文章 0 订阅
在开发新项目时用到Flex与Java交互通讯,很多地方都用到AS与JS 交互,然后js与后台通讯后返回数据给AS。  
下面我总结了 常用的AS 与 JS 通讯方式:
 其中还包含FLEX中一些小方法的使用,在这里一并记录。
1.AS--JS相互通讯部分代码:
1.1 AS 直接调用 JS 方法。无参数,无返回值。
AS代码:ExternalInterface.call("ascalljs");// ascalljs 为页面中 js 方法名称。
AS 带参数调用 JS,并获取 JS 方法返回数据。
AS代码:var backData = ExternalInterface.call("ascalljs",value1,value2);//backData:接受返回数据; ascalljs:页面中JS方法;value1,value2:AS传递JS参数
依据上面两种方法还可演变出其他情况,此处不再多写。
1.2 JS 调用 AS,JS带参数,获取AS返数据
AS 部分代码:
internal function initApp():void {
ExternalInterface.addCallback("callBackFlex", testJavascript);// mxml页面初始化该方法。 callBackFlex: js页面需调用方法名;testJavascript:实际执行的方法
}

public function testJavascript():String { 
var taStr:String = "JS调用Flex成功!"; // 中间执行代码 
return taStr; //最终返回字符串 
}
JS 中代码:
function jscallas(){//JS 方法名
var ss = birdeye.callBackFlex(); // birdeye:jsp页面中加载对应SWF文件的id; callBackFlex:与AS初始化方法中参数一相同。
alert(ss); // 获取AS 返回数据
}
3.3 JS 调用 AS,JS带参数,获取AS返回值
AS代码:
internal function initApp():void {
ExternalInterface.addCallback("getASVars",getASFun);// mxml页面初始化该方法。 getASVars: js页面需调用方法名;getASFun:实际执行的方法 
}

private function getASFun(value:String value1:String):void { 
//得到JS传来的值:value 
Alert.show("value : "+value+" value2:"+value2);//获取JS 传递参数,进行处理
return value;//返回数据
} 
JS 代码:
function thisMovie(movieName) { //次方法是对SWF名称的获取及验证,固定写法,没有为什么! 
if (navigator.appName.indexOf("Microsoft") != -1) { 
return window[movieName]; 
} else { 
return document[movieName]; 
} 
} 


function toas(){// 普通JS 方法
thisMovie("birdeye").getASVars("111","222");// birdeye:jsp页面中SWF对应id ;getASVars:对应AS初始化方法中参数一 “111” “222”:传递AS的参数
}

2.AS 给JS 传值过程中少“0”问题
问题: As 向 JS 传 000000000202, JS 中接受到为 202 。
解决: 在 AS参数变量后添加 +"",使其变成字符串格式传递。

3.Flex toolPip 使用。
问题:鼠标放在某一节点时,出现提示内容的修改。
解决:此处需要重写birdeye中原有的tooltip。
VisualGraph.as 中添加 MOUSE_OVER MOUSE_OUT 监听事件。
private var myToolTip:IToolTip;
protected function showToolTip(event:MouseEvent):void //显示提示信息
{
var rtn = "此处为数据";
myToolTip = ToolTipManager.createToolTip(rtn,mouseX, mouseY);// mouseX mouseY 提示信息位置 
}
protected function hideToolTip(event:MouseEvent):void //隐藏展示信息
{
ToolTipManager.destroyToolTip(myToolTip); //固定方法
myToolTip = null;
}

4.节点发光闪烁事件控制
问题:当对某特定节点执行end()结束闪烁时,其他节点效果也消失。
解决:
glowOutImage.target=graph.nodeByStringId(id).vnode.view;//获取某个节点对象并赋值给glowOutImage
glowOutImage.play(); 返回效果的 EffectInstance 对象的数组,一个目标一个数组。
当想关闭该节点效果时,glowOutImage.end()中必须传入该节点对应的效果实例,否则所有当前效果实例都将中断。
例如: var effArray:Array = glowOutImage.play();//将产生的效果实例数组存放到effArray
glowOutImage.end(effArray[0] as EffectInstance);//获取effArray中对象并转换为一个 EffectInstance 对象,执行效果中断

5.AS 中全局变量的使用。
public var str:String;//定义全局变量
Application.application.str//引用变量

6.AS 中 Map 数组使用。
AS中没有 Map 数组,而用Object来存放 "key-value" 关系数据。
例如: var map:Object = new Object();
map["sd"]="山东";
map["bj"]="北京";
显示某条数据: Alert.show(map["sd"]);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值