当前位置: 首页 > 编程日记 > 正文

[Flash开发笔记] 如何在as2.0中使用自定义类事件

as2编程中,我们通常要处理一些异步加载的数据,有点类似ajax中的callback,即我们不知道何时数据才会返回,并且只有当数据返回时,执行我们定义的操作。
    在flash6及以前,我们会常常碰到从外部加载一张图片或一段文本,但对于数据何时加载完成/成功,需要通过特殊的方法完成,比如在文本末尾加上特殊的标记,再使用循环检测,当读取到此标记时,认为数据加载完成/成功。

    当然这些问题,在as2.0中,已经不存在了,不管加载图片还是外部文本,一般均有onLoadComplete,onLoadProgress,OnComplete等事件来侦听加载过程或完成动作。

    今天要说的,是我们如何在自定义的Class中,自定义自己的事件。比如,我们有自己的一个类,里面封装了使用Remoting从数据库读取一些数据的操作,当数据读取完成时,Remoting的ResultEvent或FaultEvent会被执行。那么这时候,我们如何通过类的事件的方式,再把此结果返回给实例化此类的脚本段呢,这样以使代码看起来更优美,更OO,更准确。

    下面,以一个例子来说明自定义事件的使用,演示此示例,需要Flash8+Remoting+.Net FrameWork+IIS,请确保您具有这些先决条件。

一、在IIS中创建虚拟目录YaoGame,设置.net版本为1.1或2.0均可;

二、将Flash Remoting For .net安装到此虚拟目录,或者此目录中有文件:
bin\flashgateway.dll
bin\frconfig.txt
gateway.aspx
web.config
GetData.aspx


(这几个文件,您可以从本文后边下载,直接复制即可,做过Remoting开发的朋友,自然会知道其用处。)

注意Web.config

    <httpModules>
        
<add name="GatewayController" type="FlashGateway.Controller.GatewayController,flashgateway" />
    
</httpModules>

GetData.aspx内容如下:

<%@ Page Language="c#" Debug="true" %>

<%@ Register TagPrefix="Macromedia" Namespace="FlashGateway" Assembly="flashgateway" %>
<%@ Import Namespace="System.Data" %>

<Macromedia:Flash ID="Flash1" runat="Server" />

<script language="C#" runat="server">
    
void Page_Load(Object sender, EventArgs e)
    {
        
//=========================================================
        
//Author:     Joseph.Yao(http://yao.cnblogs.com)
        
//Create Date:2007-7-18 22:21:27
        
//=========================================================

        
if (Flash1.Params.Count > 0)
        {
            
if (Flash1.Params[0== null)
            {
                Flash1.Result 
= "Hello World.";
            }
            
else
            {
                Flash1.Result 
= "Hello " + Flash1.Params[0].ToString() + ".";
            }
        }
    }
</script>



三、创建一个TestClass 类,内容如下:

import mx.remoting.Service;
import mx.remoting.PendingCall;
import mx.remoting.RecordSet;
import mx.rpc.RelayResponder;
import mx.rpc.ResultEvent;
import mx.rpc.FaultEvent;
import mx.remoting.debug.NetDebug;
//NetDebug.initialize();
import mx.services.Log;
/**
*
* @Author:Joseph.Yao
* @Version:xx.x.x
* @Create Date:2007-07-18
* @Description:as2.0中自定义事件Demo。
*
*
*/
class TestClass {
    
var gatewayPath:String;
    
var nickName;
    
//构造函数
    function TestClass() {
        
//初始化网关地址
        gatewayPath = "http://localhost/YaoGame/gateway.aspx";
    }
    
function RemoteData(resultFun:String, faultFun:String) {
        
//
        //通过Remoting读取数据,但无法估计多久能返回
        //
        //注意这里的YaoGame应该与虚拟目录一致

        //这三行是Remoting从.net程序加载数据,调用是的http://localhost/YaoGame/GetData.aspx
        var myResponder = new RelayResponder(this, resultFun, faultFun);
        
//记录日志:var service:Service = new Service(gatewayPath, new Log(), "YaoGame", null, myResponder);
        var service:Service = new Service(gatewayPath, null"YaoGame"null, myResponder);
        
var pc:PendingCall = service.GetData(this.nickName);
    }
    
//Remoting成功返回数据时,此方法执行
    function Remote_Result(evt:ResultEvent):Void {
        
//
        //{此处可对加载的数据(evt.result)处理}
        //
        //当加载成功时,发出事件消息,success值为true
        Complete(true, String(evt.result));
    }
    
//Remoting返回数据出错时,此方法执行
    function Remote_Fault(evt:FaultEvent):Void {
        trace(
"加载数据失败:"+evt.fault.faultstring);
        
//当加载失败时,也发出事件消息,但success值为false,
        Complete(false"Load Data Error.");
    }
    
//某个费时的操作,无法预知多久可以完成操作,比如从数据库读取数据
    function DoSomething(nickName:String) {
        
this.nickName = nickName;
        RemoteData(
"Remote_Result""Remote_Fault");
    }
    
//通过自定义事件,将成功消息和数据"广播"出去
    function Complete(success:Boolean, msg:String) {
        obj.OnComplete(success, msg);
    }
    
//
    //======================事件==========================
    //
    private var obj;
    
//当某费时操作完成时发生的事件,其实是一个as2.0类的属性,只是属性传递的是一个function类型对象;
    public function set OnComplete(fun:Object):Void {
        //注意这里的new,如果您是把当前类“链接”到库中的mc上,则这里要稍微注意,不用new有可能会出现你不想要的效果。
        //最好的方式是每次事件“委托”的时候,都实例化一个obj出来;
        obj 
= new Object();
        obj.OnComplete 
= fun;
    }
}

四、创建一个CustomEventDemo.fla,以测试此类,在此fla时间轴第一帧中加入使用此类的代码:

var tc = new TestClass();
//这里是给类实例的OnComplete事件指定一个事件执行过程,即当数据完成时,此函数内的脚本被执行,并且数据被返回;
tc.OnComplete 
= function(success:Boolean, msg:String) {
    //success是数据加载是否成功,msg是返回的数据.
    trace(success);
    trace(msg);
};
tc.DoSomething(
"Joseph.yao");
//执行成功后,返回:
//true
//Hello Joseph.yao.


最后运行CustomEventDemo.fla文件看测试结果。


五、以上代码中对自定义事件的使用已做了较详细说明了,加黑加粗部分是关键的几处代码。其实这个示例的自定义事件,同时只能挂接一个事件,即所谓单播,如果要实现事件的多播,则稍微要复杂一些,可以通过维护一个事件列表来做,希望有机会和大家探讨。
还有注意测试此示例时,注意Flash的安全策略问题,应该在http://localhost/根下有一个crossdomain.xml文件来授权可来访的域,否则看不到结果就郁闷了。


本文示例源码完整下载(33K):/Files/yao/as2CustomEventDemo.rar



转载于:https://www.cnblogs.com/yao/archive/2007/07/18/823174.html

相关文章:

.NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)

.NET导出报表一般是采用导出Excel报表的方式输出内容。而这又分为两种方式&#xff1a;使用Excel模板方式和使用网页输出Excel格式两种。首先介绍简单的一种&#xff0c;网页输出Excel内容&#xff0c;这种不需要引用Excel的程序集。/**//// <summary> /// 报表导出辅…

从应用到内核查接口超时(中)

应用复现 接着上文 从应用到内核查接口超时&#xff08;上&#xff09; 继续排查导致接口超时的原因。 转载随意&#xff0c;文章会持续修订&#xff0c;请注明来源地址&#xff1a;https://zhenbianshu.github.io 。 Jdk 的 native 方法当然不是终点&#xff0c;虽然发现 Jdk、…

OpenCV 之 Mat 类

数字图像可看作一个数值矩阵, 其中的每个元素代表一个像素点&#xff0c;如下图所示&#xff1a; OpenCV 中&#xff0c;用 Mat 来表示该数值矩阵&#xff0c;它是很关键的一种数据结构&#xff0c;因为 OpenCV 中的大部分函数都和 Mat 有关&#xff1a; 有的是 Mat 的成员函数…

hbase shell编码显示中文

最近测试hbase shell&#xff0c;碰到个中文显示编码问题&#xff0c;最后通过Python解决了问题&#xff0c;具体操作如下&#xff1a; hbase(main):015:0* scan ‘fr_test_hbase:test_log1’ ROW COLUMNCELL 10001 columninfo:name, timestamp1500448006065, valuetmr\xE4\xB…

AJAX范例大搜罗(转载)

1&#xff0e;每天一个AJAX 该网站提供了很多非常酷的AJAX例子&#xff0c;号称是每天更新一个。 网址&#xff1a;http://www.ajaxcompilation.com/ 2&#xff0e;210个AJAX框架 一个不错的提供Ajax范例的网站&#xff0c;Ajax框架已更新至210个。 网址&#xff1a;http:…

Hbase的过滤器查询

hbase过滤器的比较运算符&#xff1a; LESS < LESS_OR_EQUAL < EQUAL NOT_EQUAL <> GREATER_OR_EQUAL > GREATER > NO_OP 排除所有 hbase过滤器的比较运算符&#xff1a; BinaryComparator 按字节索引顺序比较指定字节数组&#xff0c;采用Bytes.compareTo(…

python的进程

多进程概念&#xff1a;   由于GIL的存在&#xff0c;python中的多线程其实并不是真正的多线程&#xff0c;如果想要充分地使用多核CPU的资源&#xff0c;在python中大部分情况需要使用多进程。python提供了非常好用的多线程包(multiprocessing)&#xff0c;只需要定义一个函…

071204 晴

晚上打算把周末的剩余任务做完去池袋kitty店预习作文把电脑慢的原因查出来电脑传照片的方法一部电影一本书一本杂志单词 转载于:https://www.cnblogs.com/loverain/archive/2007/12/04/982210.html

区块链深度好文

http://www.huhangfei.com/post/4/转载于:https://www.cnblogs.com/vinplezhang/p/7325161.html

工作流引擎设计之退回任务定义

退回&#xff08;Rollback Work Item&#xff09;退回是针对本人&#xff08;工作流参与者&#xff09;的“待办任务”的操作&#xff0c;即参与者主动退回待办任务列表中的任务。为什么要退回&#xff1f;参与者接受任务后&#xff0c;发现不应由自己办理此任务或上一步的执行…

HBase常用API操作

文章目录第一步&#xff1a;创建maven工程&#xff0c;导入jar包第二步&#xff1a;开发javaAPI操作HBase表数据1、创建表myuser2、向表中添加数据3、查询数据3.1、 按照rowkey进行查询获取所有列的所有值3.2、 按照rowkey查询指定列族下面的指定列的值3.3、 通过startRowKey和…

Kanade's trio 2017多校#3 trie

求数组中i<j<k 并且ai^aj<aj^ak的三元组组数 枚举插入ak&#xff0c;让ak中每一位作为最高位&#xff0c;查找字典树内最高位不同的数字数量 注意把ak的每个前缀做一个bad标记 存储让这个前缀作为i可以与字典树内形成i,j对的个数&#xff0c;这些不满足i<j ai : 1…

使用VS2005进行代码覆盖率分析

下面通过一个简单的例子来讲解VS2005是如何做代码分析的&#xff08;此处所做的代码分析是在单元测试之后进行的&#xff0c;其分析代码仍然使用上节的做和代码&#xff09; 1、上节的原始代码和单元测试代码分别如下&#xff1a; //原始代码 using System; using System.Colle…

云计算时代的数据库运行

云计算时代的高可用数据库是可扩展、容错且与任何私有云或公共云兼容的数据库实例。它们旨在提供业务连续性&#xff0c;而不会因任何类型的硬件或网络故障而导致用户体验的影响。其核心设计原则是消除任何单点故障&#xff0c;并提供平稳的故障转移体验。 公共云和私有云使企业…

Java:在Bean中使用PropertyChangeSupport支持PropertyChangeListeners

本文主要介绍如何使用PropertyChangeSupport类来支持关联属性事件的触发。author: ZJ 2007-8-3Blog: [url]http://zhangjunhd.blog.51cto.com/[/url]JavaBean的属性与一般Java程序中所指的属性&#xff0c;或者说与所有面向对象的程序设计语言中对象的属性是一个概念&#xff0…

【做题】SRM701 Div1 Hard - FibonacciStringSum——数学和式&矩阵快速幂

原文链接 https://www.cnblogs.com/cly-none/p/SRM701Div1C.html 题意&#xff1a;定义"Fibonacci string"为没有连续1的01串。现在&#xff0c;给出\(a,b\)&#xff0c;定义一个"Fibonacci string"的权值为\(x^a y^b\)&#xff0c;其中\(x\)为0的个数&…

scala定义抽象类与抽象字段

抽象类 和Java语言一样&#xff0c;scala中也可以定义抽象类 定义&#xff1a; 如果类的某个成员在当前类中的定义是不包含完整的&#xff0c;它就是一个抽象类 不完整定义有两种情况&#xff1a; 1.方法没有方法体&#xff08;抽象方法&#xff09; 2.变量没有初始化&#xf…

kuangbin专题16B(kmp模板)

题目链接: https://vjudge.net/contest/70325#problem/B 题意: 输出模式串在主串中出现的次数 思路: kmp模板 在 kmp 函数中匹配成功计数加一, 再令 j nxt[j] 即可. 感觉有点奇怪的就是我拿 A 题的模板写这题居然会 tle, 而拿这题的模板写 A 题又没有 A 题的模板跑的快...可能…

[转]C#日期格式化 文档

日期转化一 为了达到不同的显示效果有时&#xff0c;我们需要对时间进行转化&#xff0c;默认格式为&#xff1a;2007-01-03 14:33:34 &#xff0c;要转化为其他格式&#xff0c;要用到DateTime.ToString的方法(String, IFormatProvider)&#xff0c;如下所示&#xff1a; usin…

探讨ASP.NET AJAX客户端开发技术

一、 简介 在ASP.NET AJAX组件开发中&#xff0c;存在许多环节有待我们深入挖掘。如何让ASP.NET AJAX服务端控件更有效地利用客户端脚本来为控件添加强大的客户端功能&#xff1f;如何更为方便地访问控件访问的资源&#xff0c;等等。实践证明&#xff0c;要实现最终的应用程序…

mfc 应用程序 语言进行本地化

在软件国际化的今天,资源从代码中独立出来,使在不同语言操作系统下能运行不同语言版本的程序,是很有意义的事. MFC 7.0 及更高版本提供对附属 DLL 的增强支持&#xff0c;该功能有助于创建针对多种语言进行本地化的应用程序。附属 DLL 是一个纯资源 DLL&#xff0c;它包含应用程…

前端优化系列之一:dns预获取 dns-prefetch 提升页面载入速度

问题&#xff1a;怎么做到dns域解析&#xff1f;用于优化网站页面的图片问题&#xff1a;怎么提升网站性能&#xff1f;dns域解析&#xff0c;是提升网站的一个办法。DNS Prefetch&#xff0c;即DNS预获取&#xff0c;是前端优化的一部分。 一般来说&#xff0c;在前端优化中与…

暑假集训D15总结

考试 日常爆炸 T1数据背锅&#xff0c;回天乏力 推了两个小时的T2竟然莫名RE&#xff0c;我也是服了 T3考试时就没读懂题&#xff0c;做个鬼啊 今天一直在写某奇怪的技术贴&#xff0c;竟然没有写题解&#xff08;手动滑稽&#xff09; 希望明天不要乱炸吧 博客 强行推荐一波自…

maven-assembly-plugin和maven-shade-plugin打包区别及弊端

使用 maven 插件 maven-shade-plugin 对可执行 java 工程及其全部依赖 jar 进行打包 maven-shade-pluginmaven-assembly-pluginmavenjar打包 现在基本上都是采用 maven 来进行开发管理&#xff0c;我有一个需求是需要把通过 maven 管理的 java 工程打成可执行的 jar 包&#x…

【Spark】Spark基础练习题(一)

题目&#xff1a; 1、创建一个1-10数组的RDD&#xff0c;将所有元素*2形成新的RDD 2、创建一个10-20数组的RDD&#xff0c;使用mapPartitions将所有元素*2形成新的RDD 3、创建一个元素为 1-5 的RDD&#xff0c;运用 flatMap创建一个新的 RDD&#xff0c;新的 RDD 为原 RDD 每…

Python(27)_字符串的常用的方法2

#-*-coding:utf-8-*-字符串操作s " bowen " # 从右边删 s1 s.rstrip() print(len(s1)) s2 s1.lstrip() print(len(s2)) 从右边删除元素&#xff0c;从左边删除元素&#xff0c;这个在以后项目中经常用到 二、计算个数 #-*-coding:utf-8-*-字符串操作s " bo…

tensorflow1

1、什么是tensorflow tensorflow是一个开源软件库&#xff0c;使用data flow graphs进行数值计算&#xff0c;最初由Google大脑团队开发&#xff0c;用于机器学习和深度卷积网络的研究&#xff0c;同样适用于其他广泛的领域。 2、访问tensorflow官网&#xff1a;在Windows的hos…

大型企业门户网站设计开发一般性原则和建议

[适用范围] 本文所述的原则、建议适用于大型企业信息门户网站的设计和开发&#xff0c;注意不是小型企业网站、一般企业电子商务网站、企业级Web应用系统。 [一般性原则] 一、网站设计原则 第一原则&#xff1a;内容丰富、明确 网站主要是为浏览着提供信息服务的&#xff0c;作…

8月第3周回顾:四巨头发三大新闻 一报告引多家争议

8月15日是51CTO.com成立两周年的日子&#xff0c;网站举办了多种活动进行了庆祝&#xff1b;凑巧的是&#xff0c;IT界在本周也热闹非凡&#xff1a;微软、甲骨文、IBM和Sun联手送上三份重要新闻&#xff1b;国内一份个人安全的报告引起一场小小的风波——这些都足以让关注IT技…

车辆匹配和平均车速计算

数据测试内容以及详情见 https://github.com/xueyeyu/avgsp /* 作者&#xff1a;雪夜羽 平均车速计算&#xff08;sqlserver&#xff09;基于电警 QQ&#xff1a;1412900482 */ import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement…