12321官方游戏论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 剑jian

smartinvoke入门系列整合

[复制链接]

76

主题

131

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
17958
 楼主| 发表于 2017-7-7 15:06:14 | 显示全部楼层

smartinvoke入门系列10——多窗口的实现与互调

SmartInvoke还可以轻松的帮助你实现多窗口的功能。窗口之间可以方便的互调。首先我们点击eclipse工具栏上的图标:

  打开新建对话框,输入如下内容:



点击完成后eclipse会在First_项目下新建一个SubWin.mxml文件。如下图:



我们在SubWin.mxml文件中添加一公共方法供FirstWin调用。内容如下:

  1. public function subWinMethod(bean:BeanTest):void{  
  2.   
  3.                Alert.show(bean.name);  
  4.   
  5. }  
复制代码





这里的方法必须为public的。
在FirstWin.mxml文件中添加打开SubWin窗口的代码,如下:
  1. var subWin:FlashShell=FlashShell.CreateInstance0();  
  2.   
  3.                subWin.setAppPath("SubWin");  
  4.   
  5.                subWin.setSize(400,400);  
  6.   
  7.                subWin.setText("SubWin.............");  
  8.   
  9.                
  10.   
  11.                subWin.open();  
复制代码


通过调用subWin的getFlashViewer方法获得cn.smartinvoke.gui.FlashViewer类型对象,如果说FlashShell对象的作用是控制窗口,那么FlashViewer对象的作用就是控制窗口加载的swf。
通过调用FlashViewer对象上的asyncCallFlexApp,与callFlexApp方法可以调用到加载窗口所在flex application对象上的公共方法。方法说明如下:
asyncCallFlexApp(methodName:String, params:Array = null):void
异步调用当前FlashViewer加载的flex application对象的公共方法 方法不会挂起当前执行进程,直接返回
param methodName 调用方法名称 param params 调用方法参数
callFlexApp(methodName:String, params:Array = null):Object
同步调用当前FlashViewer加载的flex application对象的公共方法 方法会挂起当前执行进程直到java返回
方法提供了不同flex applcation互掉的机制 param methodName 调用方法名称 param params 调用方法参数。
所以通过如下代码就可以访问到SubWin.mxml中的方法:

  1. var viewer:FlashViewer=subWin.getFlashViewer();  
  2.   
  3.                var bean:BeanTest=new BeanTest();  
  4.   
  5.                bean.name="pz";  
  6.   
  7.                viewer.asyncCallFlexApp("subWinMethod",[bean]);  
复制代码



但是这段代码不能在subWin.open();的后面调用,因为无法确定subWin所加载的swf是否加载完毕。不用当心,smartinvoke为我们提供了cn.smartinvoke.gui.ShellManager这个类,通过他可以监听到当前应用程序窗口的打开与关闭事件,代码如下:
         
  1. ShellManager.Instance.addListener(function (evt:CShellEvent):void{  
  2.   
  3.                                           var shell:FlashShell=evt.widget;  
  4.   
  5.                                           if(evt.type==CShellEvent.Event_Open){  
  6.   
  7.                                                          var viewer:FlashViewer=shell.getFlashViewer();  
  8.   
  9.                                                          var bean:BeanTest=new BeanTest();  
  10.   
  11.                                                          bean.name="pz";  
  12.   
  13.                                                          viewer.asyncCallFlexApp("subWinMethod",[bean]);  
  14.   
  15.                                                 }  
  16.   
  17.                                                 if(evt.type==CShellEvent.Event_Closed){  
  18.   
  19.                                                          this.labelInfo.text="窗口"+shell.getShellName()+"关闭了";  
  20.   
  21.                                                }  
  22.   
  23.                                },this);  
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

61

主题

2万

帖子

3万

积分

管理员

野心家

Rank: 9Rank: 9Rank: 9

积分
38159
QQ
发表于 2017-7-7 20:49:48 | 显示全部楼层
强      
既然无法一起出生,  那就一起祸害苍生。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|12321官方游戏论坛  

GMT+8, 2024-4-20 00:51 , Processed in 0.040123 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表