动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 软件工程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ 软件工程 ]的信息

本月文章推荐
.利用数据绑定和模板创建Atlas应用.
.消息与.Net Remoting的分布式处理.
.数据库设计三大范式应用实例剖析.
.用预测性对象点度量面向对象软件.
.动态连接库(DLL).
.SOA引发工作方式之变.
.Atlas应用程序的调试技巧.
.ISO9000:2000 质量管理八大原则.
.关于异常的使用心得.
.软件自动化测试流程.
.好的测试工程师应具备的素质.
.visitor模式概念——visitor模式.
..NET异常代码编写.
.为.NET调整你的文件工作方案.
.Apache中的表格实现剖析(2).
.ISO基本知识简介.
.Web服务的期望与现实.
.用.Net Framework设计检查EMail程.
.“6 Sigma”品质管理的研究.
.如何建立Web服务.

Atlas编程揭密之数据绑定

发表日期:2008-3-23 |



  Atlas架构提供了一种比Asp.Net中数据绑定(data binding)强大得多的客户端绑定模型。这种模型异常灵活,甚至有些类似WPF(Windows Presentation Foundation)中的绑定模型。Atlas提供的绑定模型答应您将某对象的任意一个属性绑定到另外一个对象的任意一个属性上。它不单单可以应用于数据绑定,甚至可以将某个控件的样式绑定到另外一个控件上。这样使得在Atlas中将一切关联起来变成可能。

  在本文中,我将尝试分析一些Atlas实现代码来解释Atlas是如何完成Binding的。

  首先让我们察看一小段应用Atlas Binding的代码。这里将一个textbox的text属性和一个select list的selectedValue属性绑定起来。无论你改变其中的哪个,在另一个上面都会有马上得到体现。

  Html和ASPX,定义textbox和select list。(注重必须声明一个ScriptManager服务器端对象,以引入Atlas必须的javascript文件。)

Atlas编程揭密之数据绑定(图一)<atlas:ScriptManagerID="ScriptManager1"runat="server"/>
Atlas编程揭密之数据绑定(图二)<div>
Atlas编程揭密之数据绑定(图三)Inputanintegerfrom1to5.<br/>
Atlas编程揭密之数据绑定(图四)<inputid="myTextBox"type="text"/><br/>
Atlas编程揭密之数据绑定(图五)Selectanitem.<br/>
Atlas编程揭密之数据绑定(图六)<selectid="mySelect">
Atlas编程揭密之数据绑定(图七)<optionvalue="1">value1</option>
Atlas编程揭密之数据绑定(图八)<optionvalue="2">value2</option>
Atlas编程揭密之数据绑定(图九)<optionvalue="3">value3</option>
Atlas编程揭密之数据绑定(图十)<optionvalue="4">value4</option>
Atlas编程揭密之数据绑定(图十)<optionvalue="5">value5</option>
Atlas编程揭密之数据绑定(图十二)</select>
Atlas编程揭密之数据绑定(图十三)</div>

  Atlas脚本,将上面两个HTML控件“升级”成Atlas控件。

Atlas编程揭密之数据绑定(图十四)<pageXMLns:script="http://schemas.microsoft.com/xml-script/2005">
Atlas编程揭密之数据绑定(图十五)<references>
Atlas编程揭密之数据绑定(图十六)</references>
Atlas编程揭密之数据绑定(图十七)<components>
Atlas编程揭密之数据绑定(图十八)<textBoxid="myTextBox">
Atlas编程揭密之数据绑定(图十九)<bindings>
Atlas编程揭密之数据绑定(图二十)<bindingdataContext="mySelect"dataPath="selectedValue"property="text"direction="InOut"/>
Atlas编程揭密之数据绑定(图二十)</bindings>
Atlas编程揭密之数据绑定(图二十二)</textBox>
Atlas编程揭密之数据绑定(图二十三)<selectid="mySelect"/>
Atlas编程揭密之数据绑定(图二十四)</components>
Atlas编程揭密之数据绑定(图二十五)</page>

  如上所示,我们只需要书写一小段简单的代码即可实现需要的绑定功能。

  Atlas是如何实现这些的呢?首先,Atlas需要有一种途径来监听绑定控件的绑定属性的变化(除非你不需要Atlas提供的自动绑定功能)。在Atlas.js中定义了一个名为Sys.INotifyPropertyChanged的接口,类似.NET中提供的一样。对象可以实现这个接口以期让别的对象监听到自己的属性值的变化。Atlas中所有组件的基类,Sys.Component,实现了这个接口。Sys.Component同样提供一个方法raisePropertyChanged(propertyName),这个方法应该在每个属性的setter中被调用以发出INotifyPropertyChanged.propertyChanged事件。

  目前为止,我们可以看一下Atlas控件中textbox的具体实现。看看textbox中是如何在相应的HTML事件发出时同样发出propertyChanged事件的。

Atlas编程揭密之数据绑定(图二十六)var_text;
Atlas编程揭密之数据绑定(图二十七)var_changeHandler;
Atlas编程揭密之数据绑定(图二十八)
Atlas编程揭密之数据绑定(图二十九)Atlas编程揭密之数据绑定(图三十)this.get_text=function()Atlas编程揭密之数据绑定(图三十){
Atlas编程揭密之数据绑定(图三十二)returnthis.element.value;
Atlas编程揭密之数据绑定(图三十三)}
Atlas编程揭密之数据绑定(图三十四)
Atlas编程揭密之数据绑定(图三十五)Atlas编程揭密之数据绑定(图三十六)this.set_text=function(value)Atlas编程揭密之数据绑定(图三十七){
Atlas编程揭密之数据绑定(图三十八)Atlas编程揭密之数据绑定(图三十九)if(this.element.value!=value)Atlas编程揭密之数据绑定(图四十){
Atlas编程揭密之数据绑定(图四十)this.element.value=value;
Atlas编程揭密之数据绑定(图四十二)this.raisePropertyChanged('text');
Atlas编程揭密之数据绑定(图四十三)}
Atlas编程揭密之数据绑定(图四十四)}
Atlas编程揭密之数据绑定(图四十五)
Atlas编程揭密之数据绑定(图四十六)Atlas编程揭密之数据绑定(图四十七)this.initialize=function()Atlas编程揭密之数据绑定(图四十八){
Atlas编程揭密之数据绑定(图四十九)Sys.UI.TextBox.callBaseMethod(this,'initialize');
Atlas编程揭密之数据绑定(图五十)
Atlas编程揭密之数据绑定(图五十)_text=this.element.value;
Atlas编程揭密之数据绑定(图五十二)
Atlas编程揭密之数据绑定(图五十三)_changeHandler=Function.createDelegate(this,this._onChanged);
Atlas编程揭密之数据绑定(图五十四)this.element.attachEvent('onchange',_changeHandler);
Atlas编程揭密之数据绑定(图五十五)
Atlas编程揭密之数据绑定(图五十六)_keyPressHandler=Function.createDelegate(this,this._onKeyPress);
Atlas编程揭密之数据绑定(图五十七)this.element.attachEvent('onkeypress',_keyPressHandler);
Atlas编程揭密之数据绑定(图五十八)}
Atlas编程揭密之数据绑定(图五十九)
Atlas编程揭密之数据绑定(图六十)Atlas编程揭密之数据绑定(图六十)this._onChanged=function()Atlas编程揭密之数据绑定(图六十二){
Atlas编程揭密之数据绑定(图六十三)Atlas编程揭密之数据绑定(图六十四)if(this.element.value!=_text)Atlas编程揭密之数据绑定(图六十五){
Atlas编程揭密之数据绑定(图六十六)_text=this.element.value;
Atlas编程揭密之数据绑定(图六十七)this.raisePropertyChanged('text');
Atlas编程揭密之数据绑定(图六十八)}
Atlas编程揭密之数据绑定(图六十九)}

  可以看到,当text属性改变时,Atlas发出了propertyChanged事件,这就使绑定到这个属性成为可能。

  而后Atlas的绑定模型捕捉到了这个事件,再根据binding声明查找出与其相关的目的对象以及相应的属性,并调用这个属性的Setter来实现目的对象属性的变化。

  假如源对象(source object)实现了INotifyPropertyChanged接口,并且改变的属性就是dataPath 中指定的属性,同时direction 设定为In或者InOut,Atlas绑定将通过分析引入(incoming)的binding来处理propertyChanged事件(参考下面将要介绍的evaluateIn()方法)。

  类似的,假如目的对象(target object)实现了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:指定拥有待绑定属性的对象。假如不指定的话,Atlas binding将调用包含它的父控件的dataContext属性代替。控件可以通过返回设定的dataContext或是按照默认返回其父控件的dataContext来实现这个属性。例如,某个ListView控件可以在其创建ListView Item时设定它的dataContext为一个DataRow对象,以实现绑定。

  • 属性dataPath:指定需要绑定的源对象的属性。Atlas binding还答应绑定一个嵌套的属性,类似:sourceObjectProperty.nestedProperty.nestedNestedProperty。源代码中可以看出Atlas能自动为你转化并运行这些代码。dataPath属性的默认值为空,也就是Atlas会绑定这个对象本身。

  • 属性property:指定需要绑定的目标对象的属性。你应该总是指定这个属性,否则这个绑定就没有任何意义。

  • 属性propertyKey:有时候我们可能需要绑定到某个对象的嵌套属性上。比如,假如需要绑定到style的属性color,我们可以指定property属性为style,并指定propertyKey属性为color。

  • 属性transformerArgument:传递给Atlas transformer的参数,只有设定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的“神奇的”绑定有一些更深入的理解。欢迎留言探讨。

  • 上一篇:用户手册在软件质量中的地位 人气:360
    下一篇:网站项目系统分析及软件建模 人气:397
    浏览全部软件工程的内容 Dreamweaver插件下载 常用网页广告代码全集
      最新网站源码 最新软件下载
    2008-10-12 team论坛 v2.0.4 bulid 080916 A
    2008-10-12 Roclog v3.1.6
    2008-10-12 SupeV v1.0.1 简体中文 GBK
    2008-10-12 NetCMS v1.6.0.1010 正式版
    2008-10-12 PHP考试系统PPFrame v1.2.7
    2008-10-12 LPAS个人相册 v1.6.3
    2008-10-12 快问仿百度知道系统 动态-静态-互
    2008-10-12 方卡广告防点击系统 V1.0 GB2312
    2008-10-12 泡菜内容管理系统[PCMS] v1.0 Bu
    2008-10-11 联系人分组工具 v1.1 中文破解版
    2008-10-11 FaceMelter变脸 v2.0 汉化破解版
    2008-10-11 PathTracker道路跟踪仪 v1.2 破解
    2008-10-11 Rooms手机聊天室 v0.6.7 破解版
    2008-10-11 RemoteDesktop远程桌面 v1.0 破解
    2008-10-11 ProRemote远程调音台 v1.0.1 破解
    2008-10-11 PicShare照片共享 v1.0.0 破解版
    2008-10-11 Photogene照片编辑器 v1.5 汉化破
    2008-10-11 WriteRoom共享文档 v1.0 破解版
      发表评论
    姓 名: 验证码:
    内 容:
    站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
    实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
    业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
    Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
    ホームページ制作 不動産検索システム 求人情報
    防水工事·改修工事 フットサル大会 探偵
    SEO対策 中国語教室 ホームページ作成