在ASP.NET ATLAS中创建自定义的BEHAVIOR

本文介绍如何在ASP.NET Atlas中创建自定义Behavior以增强控件功能,通过实例展示如何区分鼠标左键与右键点击。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

English Version: http://dflying.dflying.net/1/archive/120_build_your_own_behaviors_in_aspnet_atlas.html

Atlas中的Behavior定义了当控件的某个事件被触发时的行为。Behavior可以看作是一种封装了的DHTML的事件,例如click 和hover等。Behavior同样可以是一个组件,可被attach到某个Atlas客户端控件上,以提供这个Atlas客户端控件更高级,更丰富的 功能,例如一些复杂的拖放(drag & drop),自动完成,浮动等功能。Behavior将被定义在某个Atlas控件的behaviors集合中。

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

  1. Click Behavior:提供对鼠标点击的处理。
  2. Floating Behavior:提供拖放(drag & drop)的效果。
  3. Hover Behavior:提供对DHTML的事件onmouseover,onmouseout,onfocus以及onblur的处理。
  4. Pop-up Component:提供pop-up的功能,可以用来实现高级的tooltip。
  5. Auto-complete Behavior:提供自动完成的功能。这也是Atlas演示中常用的功能之一。这个Behavior还需要服务器端的处理程序。

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

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

  1. 继承于Sys.UI.Behavior基类。
  2. 定义您自己的事件以封装DHTML中的事件。这些事件将被用来暴露给其他的Atlas控件以代替原有的,未经修饰的DHTML事件。
  3. 在Behavior的构造函数中为您的事件指定处理函数,并在析构函数中detach事件的处理函数。
  4. 在处理函数中发出相应的事件。在ExtendedClickBehavior的例子中,我们根据鼠标按键的不同来发出不同的事件。
  5. 在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

资源下载链接为: https://pan.quark.cn/s/790f7ffa6527 在一维运动场景中,小车从初始位置 x=-100 出发,目标是到达 x=0 的位置,位置坐标 x 作为受控对象,通过增量式 PID 控制算法调节小车的运动状态。 系统采用的位置迭代公式为 x (k)=x (k-1)+v (k-1) dt,其中 dt 为仿真过程中的恒定时间间隔,因此速度 v 成为主要的调节量。通过调节速度参数,实现对小车位置的精确控制,最终生成位置 - 时间曲线的仿真结果。 在参数调节实验中,比例调节系数 Kp 的影响十分显著。从仿真曲线可以清晰观察到,当增大 Kp 值时,系统的响应速度明显加快,小车能够更快地收敛到目标位置,缩短了稳定时间。这表明比例调节在加快系统响应方面发挥着关键作用,适当增大比例系数可有效提升系统的动态性能。 积分调节系数 Ki 的调节则呈现出不同的特性。实验数据显示,当增大 Ki 值时,系统运动过程中的波动幅度明显增大,位置曲线出现更剧烈的震荡。但与此同时,小车位置的变化速率也有所提高,在动态调整过程中能够更快地接近目标值。这说明积分调节虽然会增加系统的波动性,但对加快位置变化过程具有积极作用。 通过一系列参数调试实验,清晰展现了比例系数和积分系数在增量式 PID 控制系统中的不同影响规律,为优化控制效果提供了直观的参考依据。合理匹配 Kp 和 Ki 参数,能够在保证系统稳定性的同时,兼顾响应速度和调节精度,实现小车位置的高效控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值