转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
在ASP.NET Atlas中创建自定义Behavior         ★★★★

在ASP.NET Atlas中创建自定义Behavior

作者:闵涛 文章来源:闵涛的学习笔记 点击数:728 更新时间:2009/4/23 10:35:12
  Atlas中的Behavior定义了当控件的某个事件被触发时的行为。Behavior可以看作是一种封装了的DHTML的事件,例如click和hover等。Behavior同样可以是一个组件,可被attach到某个Atlas客户端控件上,以提供这个Atlas客户端控件更高级,更丰富的功能,例如一些复杂的拖放(drag & drop),自动完成,浮动等功能。Behavior将被定义在某个Atlas控件的behaviors集合中。

  从Atlas文档以及源文件中,我们可以知道Atlas有如下一些内建的Behavior:

  Click Behavior:提供对鼠标点击的处理。

  Floating Behavior:提供拖放(drag & drop)的效果。

  Hover Behavior:提供对DHTML的事件onmouseover,onmouseout,onfocus以及onblur的处理。

  Pop-up Component:提供pop-up的功能,可以用来实现高级的tooltip。

  Auto-complete Behavior:提供自动完成的功能。这也是Atlas演示中常用的功能之一。这个Behavior还需要服务器端的处理程序。

  Click Behavior用来处理DHTML的onclick事件,非常有用但是它提供的功能有些简单。在一些比较复杂的程序中,我们可能需要将左右键的功能分开,例如,左键用来选择,右键用来弹出快捷菜单。虽然我们可以把这个if-else放在Click Behavior的处理函数中,但这并不是好的Atlas的方法。因此,今天我们来编写一个更加强大的Click Behavior,叫做ExtendedClickBehavior,它可以在Behavior的内部就把左右键分开,并且引发出两个不同的事件。通过编写这个ExtendedClickBehavior,您也可以了解在Atlas中创建自定义的Behavior的一般过程。

  通常的,创建自定义的Behavior有如下5个步骤:

  继承于Sys.UI.Behavior基类。

  定义您自己的事件以封装DHTML中的事件。这些事件将被用来暴露给其他的Atlas控件以代替原有的,未经修饰的DHTML事件。

  在Behavior的构造函数中为您的事件指定处理函数,并在析构函数中detach事件的处理函数。

  在处理函数中发出相应的事件。在ExtendedClickBehavior的例子中,我们根据鼠标按键的不同来发出不同的事件。

  在getDescriptor()方法中加上对您定义的事件的描述。

  下面是ExtendedClickBehavior的JavaScript代码。上述五个步骤在代码内以注释的形式标出。将下面的代码保存为ExtendedClickBehavior.js。

Sys.UI.ExtendedClickBehavior = function() {
 Sys.UI.ExtendedClickBehavior.initializeBase(this);

 var _clickHandler;

 // step 2
 this.click = this.createEvent();
 this.leftClick = this.createEvent();
 this.rightClick = this.createEvent();

 this.dispose = function() {
  // step 3
  this.control.element.detachEvent('onmousedown', _clickHandler);
  Sys.UI.ExtendedClickBehavior.callBaseMethod(this, 'dispose');
 }

 this.initialize = function() {
  Sys.UI.ExtendedClickBehavior.callBaseMethod(this, 'initialize');

  // step 3
  _clickHandler = Function.createDelegate(this, clickHandler);
  this.control.element.attachEvent('onmousedown', _clickHandler);
 }

 this.getDescriptor = function() {
  var td = Sys.UI.ExtendedClickBehavior.callBaseMethod(this, 'getDescriptor');

  // step 5
  td.addEvent('click', true);
  td.addEvent('leftClick', true);
  td.addEvent('rightClick', true);
  return td;
 }

 // step 4
 function clickHandler() {
  this.click.invoke(this, Sys.EventArgs.Empty);
  if (window.event.button == 1)
  {
   this.leftClick.invoke(this, Sys.EventArgs.Empty);
  }
  else if (window.event.button == 2)
  {
   this.rightClick.invoke(this, Sys.EventArgs.Empty);
  }
 }
}
// step 1
Sys.UI.ExtendedClickBehavior.registerSealedClass('Sys.UI.ExtendedClickBehavior', Sys.UI.Behavior);
Sys.TypeDescriptor.addType('script', 'extendedClickBehavior', Sys.UI.ExtendedClickBehavior);
  让我们在页面中测试一下这个ExtendedClickBehavior。在页面上添加一个<div>用来点击,一个label用来显示点击的信息。下面是ASPX文件中的HTML定义。不要忘记在ScriptManager中添加对ExtendedClickBehavior.js文件的引用。

<atlas:ScriptManager EnablePartialRendering="true" ID="ScriptManager1" runat="server">
 <Scripts>
  <atlas:ScriptReference Path="ExtendedClickBehavior.js" />
 </Scripts>
</atlas:ScriptManager>
<div>
<div id="myButton" style="border: 1px solid black; width: 20em; white-space:normal">Click On Me (Left and Right)!</div> <br />
<span id="myLabel">not clicked</span>
</div>
  下面是Atlas脚本定义。注意到我们使用了Atlas的setProperty Action(有关Atlas Action,请见后续文章)用来在每次点击后设置label的text。

<page xmlns:script="http://schemas.microsoft.com/xml-script/2005">
<components>
 <label id="myButton">
  <behaviors>
   <extendedClickBehavior>
   <click>
    <setProperty target="myLabel" property="text" value="clicked" />
   </click>
   <leftClick>
    <setProperty target="myLabel" property="text" value="left clicked" />
   </leftClick>
   <rightClick>
    <setProperty target="myLabel" property="text" value="right clicked" />
   </rightClick>
   </extendedClickBehavior>
  </behaviors>
 </label>
 <label id="myLabel" />
</components>
</page>
  浏览器中的运行结果:
  没有点击:
   


  左键点击:


  右键点击:


  上述示例程序可以在此下载:http://www.cnblogs.com/Files/dflying/ExtendedClickBehaviorDemo.zip 136


[C语言系列]NET 中C#的switch语句的语法  [系统软件]托拽Explore中的文件到VB.net的窗口
[系统软件]Boost库在XP+Visual C++.net中的安装  [常用软件]新配色面板:Paint.Net3.0RC1官方下载
[常用软件]用内建的“Net Meeting”聊天  [VB.NET程序]Henry的VB.NET之旅(三)—共享成员
[VB.NET程序]Henry的VB.NET之旅(二)—构造与析构  [VB.NET程序]Henry的VB.NET之旅(一)—失踪的窗体
[VB.NET程序]在托盘上显示Balloon Tooltip(VB.NET)  [VB.NET程序]Henry手记-VB.NET中动态加载Treeview节点(二)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台