日期:2011-08-07  浏览次数:20374 次

  ASP.NET Atlas中引入了客户端控件的概念,用面向对象思想将客户端JavaScript将要操作的DOM元素封装起来,带来了更清晰的代码模型以及更好的可复用性(不足之处是效率有所降低)。Atlas的客户端控件是连接JavaScript与DOM元素的桥梁,我们应该尽可能的使用客户端控件与DOM元素打交道,也就是以Atlas的方法来编写我们的程序。同时,Atlas对JavaScript面向对象方面的强大扩展(请参考:ASP.NET Atlas对JavaScript的扩展),也让我们很容易通过继承,覆写等方法来构建自定义的控件。

  在前面的一些帖子中,我介绍了一些Atlas中较复杂的控件。但同时,Atlas也提供了一些比较简单/基础的客户端控件,同样在开发中十分有用,让我们通过这个系列来熟悉Atlas自带的简单客户端控件。

  所有的Atlas客户端控件都继承于Sys.UI.Control基类,同时Sys.UI.Control继承于Sys.Component基类,让我们先看看Sys.Component提供的属性:

  ·id:Atlas组件的标识符,将Atlas客户端组件与DOM元素连接起来。这个id值与DOM元素的id属性值相同,Atlas使用这个id以找到相关的DOM元素。

  ·bindings:该组件的绑定集合。关于Atlas中的绑定,请参考:Atlas揭秘 —— 绑定(Binding)。

  ·dataContext:该组件的绑定的操作对象。如果您设置了这个属性,那么所有绑定条目默认会继承这个对象,但您也可以在绑定的声明中覆盖这个默认的设定。

  ·isInitialized:布尔值,代表该组件是否被初始化过。只读。

  ·isUpdating:该组件是否正在更新中,在开始调用beginUpdate()方法到调用endUpdate()方法期间为true,其他时间为false。只读。

  Sys.Component还提供如下的方法:

  ·beginUpdate与endUpdate:依赖于基类的实现,可以通过调用这两个方法延迟或一起更新一批组件,以提高性能或减少屏幕闪烁。

  ·initialize:构造函数,不必多言,继承类可以扩展该方法并初始化自己的成员。

  还有如下事件: propertyChanged:当组件的某个属性变化时,应该引发该事件。Atlas绑定的实现依赖于这个事件。

  现在让我们看看Sys.UI.Control提供的属性:

  ·accessKey:获取或设置控件的accessKey,该属性是DOM元素中的accessKey属性的包装。

  ·associatedElement:返回控件的相关DOM元素。这个属性应该传入给控件的构造函数,并在构造以后不可以修改。

  ·behaviors:该组件的Behavior集合。关于Atlas中的Behavior,请参考:在ASP.NET Atlas中创建自定义的Behavior。

  ·cssClass:获取或设置控件的CSS Class,该属性是DOM元素中的class属性的包装。

  ·enabled:代表该控件是否被启用,该属性是DOM元素中的enabled属性的包装。

  ·parent:获取或设置该控件的父控件。

  ·style:获取该控件相对应的DOM元素的style属性值。

  ·tabIndex:获取或设置该控件的tab index。

  ·visibilityMode:获取或设置该控件在隐藏时的显示模式,可选枚举值:Sys.UI.VisibilityMode.Collapse代表该控件隐藏时不占用页面空间,Sys.UI.VisibilityMode.Hidden代表该控件隐藏时依然占有其位置。

  ·visible:获取或设置该控件是否可见。

  Sys.UI.Control同样提供如下方法:

  ·addCssClass:为该控件添加一个CSS Class。

  ·removeCssClass:删除该控件的一个CSS Class。

  ·containsCssClass:返回布尔值,代表该控件是否有指定的CSS Class。

  ·toggleCssClass:如果该控件没有指定的CSS Class,则添加,如果有,则删除。

  ·focus:使该控件获得输入焦点。

  ·scrollIntoView:使该控件滚动到屏幕可视范围内。

  ·onBubbleEvent:处理该控件的子控件发出的Bubble事件。

  ·raiseBubbleEvent:该方法会调用该控件所有父控件的onBubbleEvent方法,来实现Bubble事件。

  在接下来的几篇中,我会介绍继承或间接继承于Sys.UI.Control的Atlas内建控件,希望不会像这篇一样枯燥。