|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我以前很喜欢Serv-U,自从它用Java重写之后我就再也没用过,实在是太慢了,我宁可用IIS搭建FTP,虽然IIS搭建FTP在权限管理上很不灵活。编程|数据 Atlas架构供应了一种比ASP.NET中数据绑定(databinding)壮大很多的客户端绑定模子。这类模子非常天真,乃至有些相似WPF(WindowsPresentationFoundation)中的绑定模子。Atlas供应的绑定模子同意您将某工具的恣意一个属性绑定到别的一个工具的恣意一个属性上。它不但单能够使用于数据绑定,乃至能够将某个控件的款式绑定到别的一个控件上。如许使得在Atlas中将统统联系关系起来酿成大概。
在本文中,我将实验剖析一些Atlas完成代码来注释Atlas是怎样完成Binding的。
起首让我们观察一小段使用AtlasBinding的代码。这里将一个textbox的text属性和一个selectlist的selectedValue属性绑定起来。不管你改动个中的哪一个,在另外一个下面城市有立即失掉表现。
HTML和ASPX,界说textbox和selectlist。(注重必需声明一个ScriptManager服务器端工具,以引进Atlas必需的JavaScript文件。)
<atlas:ScriptManagerID="ScriptManager1"runat="server"/>
<div>
Inputanintegerfrom1to5.<br/>
<inputid="myTextBox"type="text"/><br/>
Selectanitem.<br/>
<selectid="mySelect">
<optionvalue="1">value1</option>
<optionvalue="2">value2</option>
<optionvalue="3">value3</option>
<optionvalue="4">value4</option>
<optionvalue="5">value5</option>
</select>
</div>
Atlas剧本,将下面两个HTML控件“晋级”成Atlas控件。
<pagexmlns:script="http://schemas.microsoft.com/xml-script/2005">
<references>
</references>
<components>
<textBoxid="myTextBox">
<bindings>
<bindingdataContext="mySelect"dataPath="selectedValue"property="text"direction="InOut"/>
</bindings>
</textBox>
<selectid="mySelect"/>
</components>
</page>
如上所示,我们只必要誊写一小段复杂的代码便可完成必要的绑定功效。
Atlas是怎样完成这些的呢?起首,Atlas必要有一种路子来监听绑定控件的绑定属性的变更(除非你不必要Atlas供应的主动绑定功效)。在Atlas.js中界说了一个名为Sys.INotifyPropertyChanged的接口,相似.NET中供应的一样。工具能够完成这个接口以期让其余工具监听到本人的属性值的变更。Atlas中一切组件的基类,Sys.Component,完成了这个接口。Sys.Component一样供应一个办法raisePropertyChanged(propertyName),这个办法应当在每一个属性的setter中被挪用以收回INotifyPropertyChanged.propertyChanged事务。
今朝为止,我们能够看一下Atlas控件中textbox的详细完成。看看textbox中是怎样在响应的HTML事务收回时一样收回propertyChanged事务的。
var_text;
var_changeHandler;
this.get_text=function(){
returnthis.element.value;
}
this.set_text=function(value){
if(this.element.value!=value){
this.element.value=value;
this.raisePropertyChanged(text);
}
}
this.initialize=function(){
Sys.UI.TextBox.callBaseMethod(this,initialize);
_text=this.element.value;
_changeHandler=Function.createDelegate(this,this._onChanged);
this.element.attachEvent(onchange,_changeHandler);
_keyPressHandler=Function.createDelegate(this,this._onKeyPress);
this.element.attachEvent(onkeypress,_keyPressHandler);
}
this._onChanged=function(){
if(this.element.value!=_text){
_text=this.element.value;
this.raisePropertyChanged(text);
}
}
能够看到,当text属性改动时,Atlas收回了propertyChanged事务,这就使绑定到这个属性成为大概。
尔后Atlas的绑定模子捕捉到了这个事务,再依据binding声明查找出与其相干的目标工具和响应的属性,并挪用这个属性的Setter来完成目标工具属性的变更。
假如源工具(sourceobject)完成了INotifyPropertyChanged接口,而且改动的属性就是dataPath中指定的属性,同时direction设定为In大概InOut,Atlas绑定将经由过程剖析引进(incoming)的binding来处置propertyChanged事务(参考上面将要先容的evaluateIn()办法)。
相似的,假如目标工具(targetobject)完成了INotifyPropertyChanged接口,而且改动的属性就是property中指定的属性,同时direction设定为Out大概InOut,Atlas绑定将经由过程剖析流出(outgoing)的binding来处置propertyChanged事务(参考上面将要先容的evaluateOut()办法)。
接上去让我们观察binding完成代码中的的私有办法和属性来剖析一下Atlas绑定的中心完成。在这里没有需要列出触及绑定的全体代码,假如您感乐趣,能够用关头词Sys.BindingBase和Sys.Binding在Atlas.js文件中举行搜刮。起首是Sys.BindingBase供应的办法和属性。
属性automatic:指定当源工具的响应属性变更时(关于In和InOut),大概目标工具的响应属性变更时(关于Out和InOut),绑定是不是将被主动实行。这个属性默许会被置为true。固然假如你必要完整把持绑定的入手下手机会时也能够设定为false。比方,某些情形下你决意在一个AJAX哀求乐成前往的时分才入手下手绑定命据源与显现控件,以确保显现控件真正绑定到了一些数据,这时候你必要显现的挪用binding的evaluate()办法以入手下手绑定。
属性dataContext:指定具有待绑定属性的工具。假如不指定的话,Atlasbinding将挪用包括它的父控件的dataContext属性取代。控件能够经由过程前往设定的dataContext或是依照默许前往其父控件的dataContext来完成这个属性。比方,某个ListView控件能够在其创立ListViewItem时设定它的dataContext为一个DataRow工具,以完成绑定。
属性dataPath:指定必要绑定的源工具的属性。Atlasbinding还同意绑定一个嵌套的属性,相似:sourceObjectProperty.nestedProperty.nestedNestedProperty。源代码中能够看出Atlas能主动为你转化并运转这些代码。dataPath属性的默许值为空,也就是Atlas会绑定这个工具自己。
属性property:指定必要绑定的方针工具的属性。你应当老是指定这个属性,不然这个绑定就没有任何意义。
属性propertyKey:偶然候我们大概必要绑定到某个工具的嵌套属性上。好比,假如必要绑定到style的属性color,我们能够指定property属性为style,并指定propertyKey属性为color。
属性transformerArgument:传送给Atlastransformer的参数,只要设定transform时才会用到。
事务transform:这个事务同意在绑准时指定一个transformer。当你必要在绑定的时分对数据做以处置时,transformer将会是个很好的选择。比方,假如你但愿显现一个布尔值为Yes/No而不是默许的true/false,那末就应当利用一个自界说的transformer。Atlas同时供应了一些内建的transformer,比方Add,Multiply和Compare等。
办法evaluateIn:处置引进的binding。假如direction属性设置成为In大概InOut,该办法将获得源工具的属性的值(依据binding中设定的dataContext和dataPath属性),并挪用方针工具响应属性的Setter。这也就是Atlas中完成binding的中心部分。
Sys.Binding(也在Atlas.js中)中也有一些主要的办法/属性:
属性direction:指定但愿监听的属性变更的偏向。能够设定为In,Out大概InOut。默许值为In。
办法evaluateOut:与基类中的办法evaluateIn相似,可是以相反的偏向实行。固然,必要将directiton属性设定为Out大概InOut。但愿这些注释可以让您对Atlas的“奇妙的”绑定有一些更深切的了解。接待留言切磋。
有个问题想请教你一下,呵呵:)你觉得将来学什么方向比较好,我真是想不出来,知道的太少了,麻烦了。 |
|