分享
 
 
 

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

王朝asp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有