www.goodsgy.com
四、 创建客户端定制类 www.goodsgy.com
我们知道ASP.NET AJAX框架的重大“发明”之一就是,它引入了面向对象的JavaScript编程模型。现在,借助于JavaScript设计模式,我们可以轻松地创建自己的模板或类,加入继承概念,创建接口与枚举等。www.goodsgy.com
在本文中,我们将开发一个封装所有本示例中要求功能的客户端类。www.goodsgy.com
现在,右击工程,并新添加一个名为ImageMap的JavaScript文件。在此文件中,我们将定义一个新的命名空间MyServices;这个命名空间将包含我们要开发的客户端类。如下所示:www.goodsgy.com
以下是引用片段: Type.registerNamespace("MyServices"); |
www.goodsgy.com
接下来,我们定义要创建的客户端类的构造函数:www.goodsgy.com
|
以下是引用片段:www.goodsgy.com
MyServices.Location = function (uiElement, uiBody) { MyServices.Location.initializeBase(this); this._uiElement = uiElement; this._uiBody = uiBody; this._xAxis = 0; this._yAxis = 0; }www.goodsgy.com |
www.goodsgy.com
一个模板或类的构造函数也只不过是一个普通的JavaScript函数。该构造器共有两个参数:uiElement和uiBody。www.goodsgy.com
这两个参数都将用于描述在页面显示的弹出窗口。另外两个私有变量_xAxis和_yAxis用于描述弹出窗口的显示位置。典型情况下,我们最好在构造器中声明所有的私有成员。www.goodsgy.com
接下来,我们将使用原型设计模式编写该类中的成员函数和属性:www.goodsgy.com
|
以下是引用片段:www.goodsgy.com
MyServices.Location.prototype = { get_uiElement: function() { return this._uiElement; }, set_uiElement: function(value) { this._uiElement = value; }, get_uiBody: function() { return this._uiBody; }, set_uiBody: function(value) { this._uiBody = value; },www.goodsgy.com |
www.goodsgy.com
注意,这里的UI元素属性方法的定义方式非常类似于.NET中各种语言中的定义形式。www.goodsgy.com
下面的成员函数是我们的重点,它负责调用远程的Web服务:www.goodsgy.com
以下是引用片段: ShowPopupinf function(event, areaName) { MyServices.LocationService.GetAreaInfo(areaName, Function.createDelegate(this, this.OnCompleted), this.OnError, //负责进行错误处理的回叫函数 this.OnTimeOut); //负责进行超时处理的回叫函数 this._xAxis = event.clientX; this._yAxis = event.clientY; } |
www.goodsgy.com
上面的代码展示的是非常典型的从客户端调用Web服务的方法:www.goodsgy.com
1)形式与调用一个普通的本地方法几乎一样方便;www.goodsgy.com
2)Function.createDelegate函数是ASP.NET AJAX客户端开发中的极为重要的全局函数。创建此函数的原始目的之一是解决this关键字的问题。在一个由一个DOM元素引发的事件处理器中,this关键字总是引用此DOM元素而不是类本身。但在此,我们使用这个函数的理由是,使得AJAX环境在与激发Web服务的相同的类实例中调用成功时的回叫函数。当你需要引用客户端类的属性和方法时,这是相当重要的。简言之,使用此函数将使得访问调用Web服务的客户端类的属性和方法安全而准确。否则,进行异步调用的客户端类实例将为null,因为Web服务的响应是在另一个不同的上下文中执行的—这个上下文不再等同于发出异步Web调用请求的那个上下文。www.goodsgy.com
3)有意思的是,这里的GetAreaInfo方法并不是我们在前面创建的Web服务中的那个,而是属于在运行时刻创建的Web服务代理类—此代理类作为一个客户端代理访问服务器端的ASMX Web服务。www.goodsgy.com
上一页 [1] [2] [3] [4] 下一页