龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

创建定制的ASP.NET AJAX非可视化客户端组件(1)

时间:2013-03-06 14:58来源:未知 作者:admin 点击:
分享到:
【51CTO.com独家特 稿】一、简介 在本文中,我们将共同讨论如何创建一个由基类Sys.Component派生的ASP.NET AJAX非可视化客户端组件,并将展示它在Web页面中的用法。 具体说来,你将学习如何

【51CTO.com独家特稿】一、简介

在本文中,我们将共同讨论如何创建一个由基类Sys.Component派生的ASP.NET AJAX非可视化客户端组件,并将展示它在Web页面中的用法。

具体说来,你将学习如何实现:

◆使用prototype设计模式以JavaScript定义一个非可视化组件类。
◆把一个非可视化组件注册为一个由基类Component派生的类。
◆初始化该非可视化组件的基类―Component,并调用它的方法。
◆创建能够激发一个更改通知的属性。
◆打造一个完整的Demo.Timer非可视化组件。
◆在一个Web页面中使用该组件,并且绑定到它的事件。

注意,在ASP.NET AJAX 1.0框架中构建客户端组件,除了本文中介绍的方法(这些组件派生自Component)外,还存在另外两种类型的扩展基本组件功能的ASP.NET AJAX客户端组件对象:派生自Sys.UI.Behavior的Behavior和派生自Sys.UI.Control的Control。下列表格概括了Component,Behavior和Control之间的区别。

 

另外,为了运行本文中的示例,你需要具备下列条件:

◆一个测试网站;
◆安装微软ASP.NET AJAX 1.0框架,在此不再赘述。

二、非可视化客户端组件的基本功能

一个ASP.NET AJAX非可视化客户端组件对将重用于应用程序中的JavaScript代码加以封装。非可视化组件的一个典型的示例是一个每隔一定时间激发事件的定时器组件。

通过派生于Component基类,你的定制组件能够自动地继承其中的许多特征,具体包括:

◆一个跨浏览器模型―用于管理绑定到客户端对象事件的处理器。
◆在客户端应用程序中把该组件自动注册为一个实现了Sys.IDisposable接口的可释放的对象。
◆当属性改变时激发通知事件。
◆实现组件属性设置的批处理,这比通过单个属性的get和set访问器来处理所有的逻辑更为有效(在脚本大小和处理时间方面)。
◆重载Sys.UI.Control.initialize方法以便初始化所有属性和事件监听器。

三、实现一个派生自Component的客户端组件

下面的列表概括了实现一个派生自Component的定制客户端组件需要的步骤。后面,我们将作详细分析。

◆使用prototype设计模式定义一个组件类。
◆初始化该组件的基组件实例。
◆暴露所有的属性访问器,并且选择性地激发一个propertyChanged通知事件。
◆重载dispose方法以便释放资源,例如clearing事件处理器。

(一)使用Prototype设计模式定义一个组件类

一个ASP.NET AJAX客户端类(它包括一个组件类)通过JavaScript使用prototype设计模式进行定义。下面的列表归纳了使用prototype设计模式定义一个组件类所需要的步骤:

◆注册你的组件类的命名空间。
◆创建该组件的构造器函数,并且在该构造器函数中定义任何的private字段,同时设置它们的初始值。
◆使用prototype设计模式定义该组件的原型。
◆把该组件函数注册为一个派生自Component的类。

(二)初始化基类

任何派生自一个基组件类(例如组件,控件,或行为)的组件类都必须在其构造器中初始化它的基类。这使该基类对象能够执行初始化任务―例如把该组件注册为一个可释放的对象―使用Sys.Application实例。

在该组件的构造器函数中,你可以调用继承的Type.initializeBase方法,―典型地,是在该构造器中的任何其它代码运行之前进行。该initializeBase方法初始化一个注册类的基类型。一个非可视化组件类被注册为一个类―拥有一个Component基类型。当该Component基类被初始化时,它的方法可用于该组件中,并且它会把该组件自动地注册为ASP.NET AJAX应用程序中一个可释放的对象。

下列示例展示了一个派生自Component的非可视化组件的构造器函数。该构造器调用了它继承的initializeBase方法。

Samples.SimpleComponent = function()
{
  Samples.SimpleComponent.initializeBase(this);
}

(三)定义属性并激发propertyChanged通知

通常情况下,你在希望页面开发者绑定到的组件的类中进行属性定义。另外,你还可以选择从你的组件的属性中激发propertyChanged通知事件。然后,使用你的组件页面开发者就可以绑定到这些事件上。一个派生自Component,Behavior或Control的ASP.NET AJAX组件继承该raisePropertyChanged方法,调用此方法将激发一个propertyChanged事件。

(四)初始化属性和事件监听器

如果你的定制组件必须初始化任何属性或事件监听器的话,那么,你可以在该组件的原型中重载Sys.UI.Control.initialize方法。例如,一个派生自Component的非可视化组件可能会一个委托委托给一个事件―例如Window.onFocus。典型地,一个派生自Control基类的客户端控件会把任何代理绑定到它的DOM元素事件上,并且把这些DOM元素属性设置为初始值。最后一步,你需要调用基类的initialize方法以便使组件的基类最终完成初始化。

(五)释放资源

如果在释放该组件之前你的定制组件必须释放资源,那么,你需要重载dispose方法,在该重载方法中释放该资源。这可以确保在释放该组件前立即释放该资源。应该释放的资源可能包括用于绑定到DOM事件的代理。通过确保去除存在于DOM元素与该组件对象之间的循环参考,你可以使该对象彻底从内存中删除。

【文章相关内容】

第一页非可视化客户端组件的基本功能

第二页实现一个派生自Component的客户端组件  

第三页在Web页面中应用组件

精彩图集

赞助商链接