html 数据绑定

lxf2023-03-28 09:03:01

信息来源:Wayne_Deng专栏

有没有想过在java 在script中使用recordset?原来在客户端操作数据可以这么简单,定义一个数据源,将数据绑定到各种标签上,达到应用程序的效果,很酷!(首先,文章的内容都来自msdn,但用我自己的话来总结。)

先看看这两个例子
http://msdn.microsoft.com/workshop/samples/author/databind/dbevts.htm
http://msdn.microsoft.com/workshop/samples/author/databind/dbupdate.htm
不得不再次佩服微软。

这是DataBinding的架构:
架构
当然,实现数据绑定有以下步骤:

第一步是定义数据源
从IE4.0开始,支持以下四个数据源:



Tabular Data Control (TDC)
TDC提供了一种简单的访问格式文本数据的方法,通常是csv文件。
以下是一个简单的例子:

ID=dsoComposer HEIGHT=0 WIDTH=0>




但是感觉有点安全,因为客户端可以看到这个代码

XML Data Source
XML就不多说了,在IE4.0中这样使用:
CODE="com.ms.xml.dso.XMLDSO.class"
ID="xmldso"
WIDTH="0"
HEIGHT="0"
MAYSCRIPT="true">



Internet Explorer 以上可以如下:



此外,IE还提供了XML数据岛的概念:XML Data Islands.


MSHTML Data Source
html数据页示例:

Hector


Berlioz
1803

Modest


Moussorgsky




Liszt
1811

一旦定义可以这样访问:



.第二步:将数据绑定到HTML元素上
通常通过tag中的datasrc和datafld实现绑定。例如:







这就是绑定表格的例子:
http://msdn.microsoft.com/workshop/samples/author/databind/dbtable.htm

数据来源:





绑定的table













FirstLastBirthDeathOrigin

这就是效果:
First Last Birth Death Origin
Hector Berlioz 1803 1869 France
Modest Moussorgsky 1839 1881 Russia
Franz Liszt 1811 1886 France
Antonio Vivaldi 1678 1741 Italy
Johann Sebastian Bach 1685 1750 Germany
Ludwig van Beethoven 1770 1827 Germany
Wolfgang Amadeus Mozart 1756 1791 Austria
Joseph Haydn 1732 1809 Germany
Claude Debussy 1862 1918 France


第三步:动态添加数据、删除等(对象模型)
当然,绑定可以是动态的:
script:
span1.dataSrc = "#dsoComposer";
span1.dataFld = "compsr_first";

html是这样的:

并且可以访问数据源的adoo:
var oRecordSet = dsoComposer.recordset;
自然有orecordset .Movenext等等。

如:
onclick="tdcComposers.recordset.MoveFirst()">
onclick="tdcComposers.recordset.MovePrevious();
if (tdcComposers.recordset.BOF)
tdcComposers.recordset.MoveFirst();">
>"
onclick="tdcComposers.recordset.MoveLast()">

也可以这样使用:


添加删除记录是:oRecordSet.AddNew()和orecordset.Delete()。

第三步:响应各种数据事件(事件模型)
数据变更后如何做出相应的处理?
msdn提供的方法如下:

这些都是事件名列表:

Event Bubbles Cancelable Applies to Introduced In Internet Explorer Version
onbeforeupdate True True bound elements 4.0
onafterupdate True False bound elements 4.0
onrowenter True False DSO 4.0
onrowexit True True DSO 4.0
onbeforeunload False False window 4.0
ondataavailable True False DSO 4.0
ondatasetcomplete True False DSO 4.0
ondatasetchanged True False DSO 4.0
onerrorupdate True True bound elements 4.0
onreadystatechange True False DSO 4.0
oncellchange True False DSO 5.0
onrowsinserted True False DSO 5.0
onrowsdelete True False DSO 5.0



怎么样?
我觉得http://msdn.microsoft.com/workshop/samples/author/databind/dbevts.htm是一个比较全面的应用例子,好好研究一下,一定会有收获。

网上有很多利用数据绑定实现分页的例子。事实上,数据绑定可以做更多的事情,对吧?应该在richh client中有很大的应用,比如制作非常复杂的datagrid。

现在我想进一步了解如何简单地实现与服务器端的同步,因为客户端的数据绑定对服务器端没有影响(您可以从服务器端生成数据源,但客户端的操作不会自动返回服务器)。msdn说RDS可以,但这种方法太笨拙和不安全了。