0 Comments

深入剖析微软ASP.NET Ajax中的数据绑定架构上篇之

发布于:2013-10-21  |   作者:广州网站建设  |   已聚集:人围观

(一)DataSource控件

在绝大多数的web应用程序,我们都必须进行数据管理—例如检索和向用户显示数据以及把对对它们的修改保存回数据库等。为此,ASP.NET提供了一个内置的支持对象—DataSource。MS AJAX客户端脚本库也提供了类似的DataSource概念的支持。图3展示了MS AJAX中的高级数据绑定控件与它们可能的ADO.NET 2.0对应物的比较。

 

图3:MS AJAX客户端数据源控件与其ADO.NET 2.0对应物间的比较

广州网站建设,网站建设,广州网页设计,广州网站设计

【作者注】根据我的分析,在最新的AJAX Futures CTP中,DataSet似乎被显式地删除掉了(我仔细分析了所有的相关*.js文件,但是发现在PreviewScript.js文件仅支持DataSetConverter)。

总的来看,在AJAX Futures CTP中共存在两种类型的DataSource:

①Sys.Data.DataSource—用于描述一个表格式数据结构(例如一个数据库查询的结果),非常类似于ASP.NET 2.0中的SQLDataSource对象。这个控件可以用作ListView和ItemView控件的客户端数据源。你完全可以从服务器端加载数据并且把修改结果保存回服务器端。

②Sys.Data.XMLDataSource—用于描述一个层次式数据结构(例如一个XML文件),非常类似于ASP.NET 2.0中的XMLDataSource对象。这个控件可以用作XSLTView控件的客户端数据源。注意,这是一个只读数据源—你仅可以读取并把数据显示给用户但是却无法把对它们的修改保存回服务器端。

但请注意在本系列文章中,我们仅探讨前者。

既然所有的客户端高级数据绑定控件都包括于文件PreviewScript.js内,所以让我以图形方式来给出这些控件间的直接关系描述(图4)。

 

图4:MS AJAX主要数据绑定控件间的层次关系图

 

下面的列表1相应于DataSource控件的prototype和descriptor定义:

列表1

 


				

Sys.Preview.Data.DataSource.prototype = { _data: null, _initialData: null, _autoLoad: false, _serviceURL: "", _loadMethod: "", _serviceType: Sys.Preview.Data.ServiceType.DataService, _isReady: true, _dataChangedDelegate: null, _request: null, _timeout: 0, //……omitted _onDataAvailable: Sys$Preview$Data$DataSource$_onDataAvailable, get_data: Sys$Preview$Data$DataSource$get_data, set_data: Sys$Preview$Data$DataSource$set_data, get_initialData: Sys$Preview$Data$DataSource$get_initialData, set_initialData: Sys$Preview$Data$DataSource$set_initialData, get_isDirtyAndReady: Sys$Preview$Data$DataSource$get_isDirtyAndReady, get_isReady: Sys$Preview$Data$DataSource$get_isReady, _set_isReady: Sys$Preview$Data$DataSource$_set_isReady, get_loadMethod: Sys$Preview$Data$DataSource$get_loadMethod, set_loadMethod: Sys$Preview$Data$DataSource$set_loadMethod, get_parameters: Sys$Preview$Data$DataSource$get_parameters, get_serviceURL: Sys$Preview$Data$DataSource$get_serviceURL, set_serviceURL: Sys$Preview$Data$DataSource$set_serviceURL, get_serviceType: Sys$Preview$Data$DataSource$get_serviceType, set_serviceType: Sys$Preview$Data$DataSource$set_serviceType, get_rowCount: Sys$Preview$Data$DataSource$get_rowCount, initialize: Sys$Preview$Data$DataSource$initialize, onDataPropertyChanged: Sys$Preview$Data$DataSource$onDataPropertyChanged, onRequestComplete: Sys$Preview$Data$DataSource$onRequestComplete, onLoadComplete: Sys$Preview$Data$DataSource$onLoadComplete, ready: Sys$Preview$Data$DataSource$ready, load: Sys$Preview$Data$DataSource$load, save: Sys$Preview$Data$DataSource$save } Sys.Preview.Data.DataSource.descriptor = { properties: [ { name: 'data', type: Object }, { name: 'autoLoad', type: Boolean }, { name: 'initialData', type: String }, { name: 'isDirtyAndReady', type: Boolean, readOnly: true }, { name: 'isReady', type: Boolean, readOnly: true }, { name: 'loadMethod', type: String }, { name: 'rowCount', type: Number, readOnly: true }, { name: 'serviceURL', type: String }, { name: 'parameters', type: Object, readOnly: true }, { name: 'serviceType', type: Sys.Preview.Data.ServiceType } ], methods: [ { name: 'load' }, { name: 'save' } ], events: [ { name: 'dataAvailable', readOnly: true } ] } Sys.Preview.Data.DataSource.registerClass('Sys.Preview.Data.DataSource', Sys.Component);

广州网站建设,网站建设,广州网页设计,广州网站设计

【注】这段代码截获于调试过程中的源码文件。

根据我的分析,上面所有prototype块中的内容均可以用于JavaScript编程中,但是仅有那些位于descriptor块中的内容才可用于xml-script声明性编程中(在本系列中,我们将主要讨论这种方法)。

标签:
飞机