|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
C#中有两处地方用到new关键字,第一处也是最常见的一处是用在调用构造函数的时候,这种情况也是大家见的最多的一种。另一处是用在派生类中,作用有隐藏成员,切断继承关系等,相信第二处的用法大家明显要比第一处生疏。asp.net|创立EnglishVersion: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:
ClickBehavior:供应对鼠标点击的处置。
FloatingBehavior:供应拖放(drag&drop)的效果。
HoverBehavior:供应对DHTML的事务onmou搜索引擎优化ver,onmou搜索引擎优化ut,onfocus和onblur的处置。
Pop-upComponent:供应pop-up的功效,能够用来完成初级的tooltip。
Auto-completeBehavior:供应主动完成的功效。这也是Atlas演示中经常使用的功效之一。这个Behavior还必要服务器真个处置程序。
ClickBehavior用来处置DHTML的onclick事务,十分有效可是它供应的功效有些复杂。在一些对照庞大的程序中,我们大概必要将摆布键的功效分隔,比方,左键用来选择,右键用来弹出快速菜单。固然我们能够把这个if-else放在ClickBehavior的处置函数中,但这并非好的Atlas的办法。因而,明天我们来编写一个加倍壮大的ClickBehavior,叫做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;
//step2
this.click=this.createEvent();
this.leftClick=this.createEvent();
this.rightClick=this.createEvent();
this.dispose=function(){
//step3
this.control.element.detachEvent(onmousedown,_clickHandler);
Sys.UI.ExtendedClickBehavior.callBaseMethod(this,dispose);
}
this.initialize=function(){
Sys.UI.ExtendedClickBehavior.callBaseMethod(this,initialize);
//step3
_clickHandler=Function.createDelegate(this,clickHandler);
this.control.element.attachEvent(onmousedown,_clickHandler);
}
this.getDescriptor=function(){
vartd=Sys.UI.ExtendedClickBehavior.callBaseMethod(this,getDescriptor);
//step5
td.addEvent(click,true);
td.addEvent(leftClick,true);
td.addEvent(rightClick,true);
returntd;
}
//step4
functionclickHandler(){
this.click.invoke(this,Sys.EventArgs.Empty);
if(window.event.button==1)
{
this.leftClick.invoke(this,Sys.EventArgs.Empty);
}
elseif(window.event.button==2)
{
this.rightClick.invoke(this,Sys.EventArgs.Empty);
}
}
}
//step1
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:ScriptManagerEnablePartialRendering="true"ID="ScriptManager1"runat="server">
<Scripts>
<atlas:ScriptReferencePath="ExtendedClickBehavior.js"/>
</Scripts>
</atlas:ScriptManager>
<div>
<divid="myButton"style="border:1pxsolidblack;width:20em;white-space:normal">ClickOnMe(LeftandRight)!</div><br/>
<spanid="myLabel">notclicked</span>
</div>
上面是Atlas剧本界说。注重到我们利用了Atlas的setPropertyAction(有关AtlasAction,请见后续文章)用来在每次点击后设置label的text。
<pagexmlns:script="http://schemas.microsoft.com/xml-script/2005">
<components>
<labelid="myButton">
<behaviors>
<extendedClickBehavior>
<click>
<setPropertytarget="myLabel"property="text"value="clicked"/>
</click>
<leftClick>
<setPropertytarget="myLabel"property="text"value="leftclicked"/>
</leftClick>
<rightClick>
<setPropertytarget="myLabel"property="text"value="rightclicked"/>
</rightClick>
</extendedClickBehavior>
</behaviors>
</label>
<labelid="myLabel"/>
</components>
</page>
无论谁倒了对双方阵营的粉丝们也是有害无益。 |
|