[转]剖析ASP.NET AJAX的面向对象思想和ASP.NET AJAX的组件开发


======================================================
注:本文源代码点此下载
======================================================

剖析asp.net ajax的面向对象思想

作者:asp.net 发布时间:20070306 文章来源:http://www.chinaaspx.com/dotnet/aspnet/20070306/2096.html

人们期待已久的asp.net ajax v1.0正式版终于发布了。现在你能用microsoft asp.net ajax的javascript很容易的写出丰富的、交互式的web应用。尤其值得关注的是microsoft ajax library增加了面向对象的支持,而以前javascript是不支持面向对象开发的。现在icrosoft ajax library能很好的支持类、名字空间、继承、接口、枚举、反射等特征。这些新增加的功能类似于.net framework,这使得开发asp.net ajax应用变得容易维护,容易扩充。现在我们看看microsoft ajax library是如何支持以上特征的。

1.类、成员和名字空间

在microsoft ajax library中,所有的javascript类都继承自object(类似于.net framework库,都继承自object),在asp.net ajax应用中你可以运用面向对象的编程模式创建继承自microsoft ajax基类的对象和组件,类有四种成员:字段、属性、方法、事件。字段和属性是名/值对,用于描述一个类的一个实例的特性的。字段是由简单类型构成且可直接访问,例如:

myclassinstance.name="fred"。

属性可以是任何简单类型或引用类型,通过get和set方法访问。在asp.net ajax中,get和set是独立的函数,并规定在函数名中使用前缀"get_" 或 "set_" ,例如要获取或设置cancel属性的值时,你可以调用get_cancel或set_cancel方法。

一个方法是完成一个活动的函数而不是返回一个属性的值。属性和方法在下面的例子里都有示范。

事件指示特指的动作发生。当一个事件发生时,它可以调用一个或多个函数。事件所有者可以完成等待事件发生的任何任务。

名字空间是对关联类的逻辑分组。名字空间使你可以对公共功能进行分组。

为了使asp.net web页面具有asp.net ajax功能,你必须添加'@') asp.net ajax组件开发一点通

来源:csdn作者:whandsome发布时间:2007-3-26人气:5

随着越来越多的asp.net开发者使用ajax技术,自己动手从sys.component基类继承开发一个asp.net ajax 非可视客户端组件和如何使用它变得越来越重要。在本文中将讨论如何编写一个asp.net ajax 非可视客户端组件并注册使用它。

一、概述

非可视组件都继承于组件,它们都没有界面表现,这是本文讨论的重点。另外asp.net ajax还有两个新增的asp.net ajax 客户端组件对象类型:sys.ui.behavior和sys.ui.control,它们扩充了基本组件的功能,开发行为类组件要继承于sys.ui.behavior,开发控件要继承于sys.ui.control,它们与非可视组件不同。虽然本文主要讨论非可视组件,但搞清除它们的内在区别很有必要,下面概括了组件、行为和控件的不同之处:

组件:没有界面表现,例如timer组件,它通过时间间隔触发事件但在界面上不显示;没有关联的dom元素;封装了客户端代码以便于重用;从组件基类继承而来。

行为:扩展了dom元素的行为,例如给文本框加水印效果;虽然不能修改和dom元素相关联的基本行为,但可以创建界面元素;如果给id赋值,通过它能够直接访问dom元素的自定义属性(expando);不需要关联到另外的客户端对象,例如一个类从控件或行为类继承而来;在它们的element属性中能够参照一个控件或者一个不是控件的元素;是从扩展了组件基类的行为基类继承而来。

控件:把dom 元素表现为一个客户端对象, 特别是能改变原始的dom 元素的普通行为为它添加新的功能;直接通过控件expando访问dom元素;继承自扩展了组件基类的控件基类。

用javascript代码封装一个asp.net ajax 非可视客户端组件目的是为了能多次被重用,如timer组件就是一个较典型的非可视组件例子,它通过时间间隔来触发事件。通过继承组件基类,你的自定义组件自动继承了许多基类支持的特征。包括如下:

1.以交互的浏览模式来管理邦定到客户端对象事件的处理。

2.在客户端应用中注册的组件实现了sys.idisposable接口,是一个可释放的对象。

3.当属性被改变时触发通知事件。

4.完成组件属性设置的批处理过程,不仅减少了脚本代码量,而且在处理时间上比单独的get和set访问器有更高的效率。

5.对sys.ui.control.initialize方法的重写能初始化任何属性和事件监听器。

通过继承组件来开发一个客户端组件大致需要如下步骤:

1.用原型设计模式定义一个组件类。

2.初始化组件的基组件实例。

3.公布所有属性访问器,如果需要也可以激活propertychanged的通知事件。

4.重写dispose方法用来释放资源,例如清除时间处理句柄。

二、用原型设计模式定义一个组件类

使用javascript的原型设计模式定义一个asp.net ajax客户端类或者一个组件类要经过如下步骤:

1.为你的组件类注册名字空间。

2.创建组件的构造器函数,并在构造器函数里定义所有私有字段和设置他们的初始值。

3.使用原型设计模式定义组件的原形。

4.注册这个组件类并指定继承类。

下面的代码例子中定义了一个简单的客户端组件类,这个类虽然没有什么实用功能,但它展示了如何用原形定义一个从component基类继承而来的类代码框架。

// 声明一个名字空间

type.registernamespace("samples");

//定义一个简单的组件.

samples.simplecomponent = function()

{

samples.simplecomponent.initializebase(this);

// 在构造器中初始化数组和对象

//使它们对于每个实例保持唯一.

//所有的字段在这里定义.

this._arrayfield = [];

this._objectfield = {};

this._aprop = 0;

}

//创建原型.

samples.simplecomponent.prototype =

{

// 为属性定义 set 和 get 访问器.

set_aprop: function(anumber)

{

this._aprop = anumber;

},

get_aprop: function()

{

return this._aprop;

},

//定义一个方法.

dosomething: function()

{

alert('a component method was called.');

}

} //原型定义结束.

//声明要继承的基类.

samples.simplecomponent.inheritsfrom(sys.component);

// 注册这个类,以 sys.component为基类.

samples.simplecomponent.registerclass('samples.simplecomponent', sys.component);

从上面的代码例子可以得出,定义一个asp.net ajax的客户端类或控件类大致要遵循如下几项规则:

1.如果要把类放到一个名字空间中,要调用type.registernamespace方法来注册这个名字空间。

2.通过声明构造器函数名来定义类的构造器函数和构造器函数的名字空间,在构造器中声明了所有的私有字段,构造器中的所有私有变量通过this指针被声明为实例字段。约定私有字段名前要加下划线前缀。

samples.simplecomponent = function()

{

samples.simplecomponent.initializebase(this);

this._arrayfield = [];

this._objectfield = {};

this._aprop = 0;

}

3.定义类原型。在原型中,定义了所有的公共和私有的方法,包括属性访问器方法和事件。一般所有的字段都在构造器中定义,如果在原型中定义字段而不是在构造器中定义在性能上会稍微有一些提高,但并不是所有的字段都可以定义在原型中,例如array 和 object字段类型必须定义在构造器中,为了使它们在每个实例中保持唯一,就不能在原型中定义。

4.引用原型中的成员都是通过this指针,用this指针有较好的性能,因为它使用了很少的内存。

5.通过调用方法type.registerclass来注册类。

三、创建自定义asp.net ajax非可视客户端组件步骤

1.初始化基类

任何从基础组件类继承而来的组件类,在构造器函数中必须初始化它的基类。在组件的构造器函数中,你要调用继承来的type.initializebase方法,在构造器函数中必须在任何代码执行前执行初始化方法。initializebase方法初始化了一个注册类的基础类型,使一个非可视化组件类具备了组件类的基本类型。当组件基类被初始化后,组件基类的方法对这个组件也都是有效的,注册的这个组件会自动成为asp.net ajax应用程序可释放的对象。

下面代码展示了在从组件继承来的非可视化组件的构造器函数中调用了继承来的initializebase方法:

samples.simplecomponent = function()

{

samples.simplecomponent.initializebase(this);

}

2.定义属性和激活属性变化通知事件

你可能希望在你的组件类中定义的属性能够让页面开发者邦定到它上面,如果需要你也可以为你的组件属性激活propertychanged notification事件,页面开发者能够邦定到这些事件上,从组件、控件、行为继承而来的组件继承了raisepropertychanged方法,当触发属性改变事件时这个方法就会被调用。

3.初始化属性和事件监听器

如果你的自定义组件必须初始化所有属性和事件监听器,你可以在组件原型中重写sys.ui.control.initialize方法。例如一个从组件继承来的非可视化组件可以把委托赋值给一个事件如window.onfocus。一个从控件基类继承来的客户端控件能够把任何委托邦定到dom元素事件和给dom元素属性设置初始值,最后,你调用基类的初始化方法使组件基类完成初始化。

4.释放资源

如果在你的自定义组件释放以前必须释放一些资源,就需要重写dispose方法,并在重写的dispose方法中释放这些资源,以确保在组件释放以前这些资源被立即释放。释放的资源包括清除邦定到dom事件的程序句柄,dom元素和组件对象之间的相互引用也要移除,以确保对象从内存中能够移除掉。

5.在页面中使用非可视化组件

在asp.net ajax应用程序页面上使用一个用户客户端组件,首先要在web页面上注册组件脚本库。然后要创建一个组件实例。

用页面上scriptmanager控件通过声明方式或者用编程方式注册客户端控件需要的脚本。声明格式如下:

http://blog.csdn.net/chaomawen/archive/2007/03/24/1539721.aspx


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值