快捷搜索:

以服务器端为中心的 ASP.NET AJAX 模式 (Part 1 - Beh

什么是Behavior?

什么是Behavior?Behavior与Control有什么不合?这是首先必要回答的问题。

在Windows开拓傍边,Behavior的观点是不存在的,有的只是Control。ASP开拓连Control都没有的,到了ASP.NET才引入了Control的观点。为什么Ajax开拓要引入Behavior这样的观点呢?由于Behavior意味着不必要改变原有的组件逻辑,而改变原有组件的逻辑在客户端每每是弗成行的,至少是难以实现的。

举个最简单的例子,一个便是一个浏览器内部的工具,你无法扩展这个工具的类型,也无法为它加上新的属性与措施,至少并非所有浏览器都容许你在JavaScript中这样做。然而假如你想要让它加上auto-complete(或谓suggest)的功能,这是可以做到的,并且很多人都做过了,例如ASP.NET AJAX Control Toolkit的AutoComplete,或者是script.aculo.us的autocompleter。这些实现都基于同一种要领,便是考试测验基于input已有的接口在它之外添加新功能,而非考试测验承袭input并在它之内添加功能。

类似的做法在Ajax开拓中普遍存在。例如说拖放吧,现在离HTML5拖放的周全遍及不知道还有多远,以是大年夜家都只能基于现有的鼠标变糊弄开拓拖放功能。又或者说带有验证功能的输入框,无论是input照样select,无论是客户端验证照样办事器端验证,也都是基于现有HTML元素的变糊弄完成的。这统统都是Behavior。

什么环境下应用Behavior?

简单归纳,就两个前提:

必要基于特定的一个组建进行扩展

组建本身所处的情况短缺可扩展性

单看第1个前提,我们有富厚的选择。很多人的第一反映便是承袭自该组件,把扩展功能做到子类里面。认识设计模式的话,可能还会想到decorator pattern。然而在浏览器的情况傍边,受到第2个前提的限定,承袭或者decorator pattern都是弗成行的。这时刻,我们就必要应用Behavior了。

在必然程度上,我们可以把Behavior看作一种协调了的decorator pattern。在decorator pattern中,decorator也承袭自组件,是以当一个组件应用decorator pattern后,我们就把decorator放在原组件所处的位置上,而原组件就成了decorator的一个子节点(基于树的角度来看的话)。假如再加一个decorator,原decorator就会犹如一个通俗组件那样再被封装一次。在多个decorator的环境下,decorator之间是串联的关系。Behavior本身不是一个浏览器内部的组件,它无法承袭自input的基类,是以Behavior也不能串联。Behavior本身本也不会取代input在树中的位置,这使得Behavior可以并联起来——一个input可以有多个Behavior,例如一个是自动完成,别的一个是输入验证。

总之,假如你原本的事情便是和UI打交道,并且纯熟应用decorator pattern,那么在进行Ajax开拓时把decorator pattern换成Behavior就可以了。

小结

回偏激来看文章开首所说的MessageBox(或谓confirm)的问题,假如这个功能不必要对办事器端进行反馈,完全可以应用Behavior实现。ASP.NET AJAX Control Toolkit就有ConfirmButton这样一个器械,在客户端叫Behavior,在办事器端叫Extender,着实Extender便是对Behavior在办事器端做一下封装而已。当然,ConfirmButton不能完全实现MessageBox的功能,它只能在用户选择“取消”时取消全部提交操作,但不能够履行别的一个办事器真个代码分支。这算是Behavior的一个限定,便是它只能在客户端添加额外的功能,然则它不能影响到与办事器真个交互。但很多时刻,恰是这种限定确保了我们开拓的组件是与办事器端解耦的。

您可能还会对下面的文章感兴趣: