HTML中的数据绑定(Data Binding)

数据

有没想过在javascript中使用recordset?原来在客户端操作数据也可以这样简单,定义一个数据源,将数据绑定在各种tag上,实现应用程序般的效果,酷毙了!(首先申明一点,文章的内容全部来自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文件。
下面是一个简单的示例:

<OBJECT CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83"
ID=dsoComposer WIDTH=0 HEIGHT=0>
<PARAM NAME="DataURL" VALUE="composer.csv">
</OBJECT>

Remote Data Service (RDS)
远程数据服务,直接访问远程服务器端的数据,Internet Explorer 4.0. RDS 通过OLE-DB 或 Open Database Connectivity (ODBC)来实现。

示例:

<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
ID=dsoComposer HEIGHT=0 WIDTH=0>
<PARAM NAME="Server" VALUE="http://musicserver">
<PARAM NAME="Connect" VALUE="dsn=music;uid=guest;pwd=">
<PARAM NAME="SQL" VALUE="select compsr_name from composer">
</OBJECT>
不过感觉有点安全性的问题,因为客户端能看到这段代码。

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

Internet Explorer 5以上可以这样:

<!--[if gte IE 5]>
<XML ID="xml1">
<topic-info>
<page-type>reference</page-type>
<member-type>property</member-type>
<persistent-name>ACCESSKEY</persistent-name>
<runtime-name readable="1" writeable="1">accessKey</runtime-name>
<abstract>Sets or retrieves the accelerator key for the object.</abstract>
</topic-info>
</XML>
<![endif]-->

另外IE还提供了一个XML数据岛的概念:XML Data Islands.

MSHTML Data Source
html数据页示例:
<H1 ID=COMPSR_FIRST>Hector</H1>
<MARQUEE ID=COMPSR_LAST>Berlioz</MARQUEE>
<DIV ID=COMPSR_BIRTH>1803</DIV>
<H2 ID=COMPSR_FIRST>Modest</H2>
<H3 ID=COMPSR_LAST>Moussorgsky</H3>
<BUTTON ID=COMPSR_BIRTH>1839</BUTTON>
<TEXTAREA ID=COMPSR_FIRST>Franz</TEXTAREA>
<XMP ID=COMPSR_LAST>Liszt</XMP>
<SPAN ID=COMPSR_BIRTH>1811</SPAN>

一旦定义可以这样访问:

<OBJECT ID=htmlComposer DATA="compdata.htm" HEIGHT=0 WIDTH=0>
</OBJECT>
.第二步:绑定数据到HTML元素上
一般都是通过tag中的datasrc和datafld实现绑定的。例如:
<INPUT TYPE=TEXTBOX DATASRC="#dsoComposers" DATAFLD="compsr_last">

<TABLE DATASRC=#dsoComposer>
<TR>
<TD><DIV DATAFLD=compsr_first></DIV></TD>
</TR>
</TABLE>
这个是绑定表格的示例:
http://msdn.microsoft.com/workshop/samples/author/databind/dbtable.htm

其中数据来源:
<OBJECT id="tdcComposers" CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">
<PARAM NAME="DataURL" VALUE="http://msdn.microsoft.com/workshop/samples/author/databind/composer.csv">
<PARAM NAME="UseHeader" VALUE="True">
<PARAM NAME="TextQualifier" VALUE="'">
</OBJECT>
绑定的table
<TABLE datasrc=#tdcComposers>
<THEAD><TR STYLE="font-weight:bold">
<TD>First</TD><TD>Last</TD><TD>Birth</TD><TD>Death</TD><TD>Origin</TD>
</TR></THEAD>
<TBODY>
<TR>
<TD><DIV datafld="compsr_first"></DIV></TD>
<TD><DIV datafld="compsr_last"></DIV></TD>
<TD><DIV datafld="compsr_birth"></DIV></TD>
<TD><DIV datafld="compsr_death"></DIV></TD>
<TD><DIV datafld="origin"></DIV></TD>
</TR>
</TBODY>
</TABLE>
这就是效果了:
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是这样的:
<SPAN DATASRC="#dsoComposer" DATAFLD="compsr_first"></SPAN>
而且可以访问数据源的ado:
var oRecordSet = dsoComposer.recordset;
自然就有oRecordSet .MoveNext等等。

如:
<INPUT ID=cmdNavFirst TYPE=BUTTON VALUE="<<"
onclick="tdcComposers.recordset.MoveFirst()">
<INPUT ID=cmdNavPrev TYPE=BUTTON VALUE=" < "
onclick="tdcComposers.recordset.MovePrevious();
if (tdcComposers.recordset.BOF)
tdcComposers.recordset.MoveFirst();">
<INPUT ID=cmdNavNext TYPE=BUTTON VALUE=" > "
onclick="tdcComposers.recordset.MoveNext();
if (tdcComposers.recordset.EOF)
tdcComposers.recordset.MoveLast();">
<INPUT ID=cmdNavLast TYPE=BUTTON VALUE=">>"
onclick="tdcComposers.recordset.MoveLast()">

还可以这样用:
<SCRIPT Language="VBScript">
For Each objFld in rsAttendees.Fields
document.write("The field name is " & objFld.Name & "<BR>")
document.write("The field value is " & objFld.Value & "<BR>")
Next
</SCRIPT>

添加删除记录就是:oRecordSet.AddNew()以及oRecordSet.Delete()。

第三步:响应各种数据事件(事件模型)
如何在数据更改后做出相应的处理?
msdn中提供的方法是这样的:
<SCRIPT FOR=cboSort(数据源名) EVENT=onchange(事件名)>
……
</SCRIPT>
这些是事件名列表:

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算是一个应用比较综合的例子了,好好研究一下,必有收获。

网上有不少利用数据绑定实现分页的示例,其实数据绑定还可以做更多的事情吧?应该在rich client里面有非常大的应用,例如制作非常复杂的datagrid。

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

时间: 2024-08-08 07:24:46

HTML中的数据绑定(Data Binding)的相关文章

Silverlight3系列(七)数据绑定 Data Binding 3 数据类型转换 Data Converte

Silverlight3系列(七)数据绑定 Data Binding 3 数据类型转换 Data Converter 7 数据转换 在普通的情况下,数据从后台到前台显示,没有任何变化.看起来是符合逻辑的,但是有可能不是你想要的效果,数据源的数据可能是的低级别的(这里的低级别是说数据比较原始,或者说是数据库可以理解的,不是最终用户可以理解的形式),你不想让他直接显示在界面上.例如:你可能会将数字变成用户可以看懂的形式.或者是想让日期显示成长格式的字符串.如果是这样的话,你需要将数据转换成正确的显示

Silverlight3系列(四)数据绑定 Data Binding 1

今天我们讨论的是Silverlight3中的数据绑定,内容来自 <Pro Silverlight3 in C#>的读后感,中文名称可以译为<Silverlight3高级编程 C#版>.我找到的是一本PDF的,在网上可以搜索到下载地址. 数据绑定提供了一种,从对象中获取信息,然后显示在你的应用程序的界面上,同时不需要写冗长的代码就可以完成所有的工作的方式.通常情况下,富客户端提供两种绑定方式,不仅可以从兑现获取数据,显示到界面上,也可以将界面的数据传回给对象. Silverlight

Android简明开发教程十:数据绑定Data Binding

前面提到AndroidGraphics2DTutorial说过它是ListActivity派生出来的.ListActivity中显示的是ListView,ListView和 Gallery ,Spinner有一个共同点:它们都是AdapterView的子类.AdapterView的显示可以通过数据绑定来实现,数据源可以是 数组或是数据库记录,数据源和AdapterView是通过Adapter作为桥梁.通过Adapter,AdatperView可以显示数据源或处理用户选 取时间,如:选择列表中某项

Silverlight3系列(八)数据绑定 Data Binding 3 数据模板 Data Templates

8 数据模板 数据模板在xaml标记中是比较重要的,它定义了绑定对象如何显示.一共有两种类型的控件支持数据模板: 1)内容控件(具有Content属性的控件)通过ContentTemplate属性支持数据模板.用来显示你放在Content属性中的任何东西. 2)列表控件(从ItemsControl中继承而来的控件)通过ItemTemplate属性支持数据绑定.这个模板用来显示集合(你提供给ItemsSource属性的对象集合)中每一个Item. 列表模板是以内容模板为基础的,就好像ListBox

Silverlight3系列(五)数据绑定 Data Binding 2

接着上面一篇,我们来讨论绑定集合等. 首先看一下可以进行绑定集合的控件属性,暂时我就不翻译了,因为翻译不好,还不如读英文呢. Name Description ItemsSource Points to the collection that has all the objects that will be shown in the list. DisplayMemberPath Identifies the property that will be used to creat the dis

数据绑定(data binding)

据绑定(Data Binding)-Part2 原文链接 : Data Binding – Part 2 原文作者 : Mark Allison 译文出自 : 开发技术前线 www.devtf.cn.未经允许,不得转载! 译者 : desmond1121 校对者: desmond1121 在之前我们做了一个简单的Twitter客户端,但是简单地介绍ViewHolder实现,可能没有充分地让你明白Data Binding的使用方法.那么我们现在就来看看怎么样将Data Binding引入到项目中.

数据绑定(data binding)3

数据绑定(Data Binding)-Part3 原文链接 : Data Binding – Part 3 原文作者 : Mark Allison 译文出自 : 开发技术前线 www.devtf.cn.未经允许,不得转载! 译者 : desmond1121 校对者: desmond1121 勘误:原文中使用ModelView一词,但实际上MVVM是Model-View-ViewModel,故应为ViewModel. 在之前的文章中,我们使用Data Binding与布局中的TextView配合搭

数据绑定(data binding )1

数据绑定(Data Binding)-Part1 原文链接 : Data Binding – Part 1 原文作者 : Mark Allison 译文出自 : 开发技术前线 www.devtf.cn.未经允许,不得转载! 译者 : desmond1121 校对者: desmond1121 2015年的Google I/O大会发布了很多新的Android库和工具,Data Binding就是其中之一.在本系列文章中,我们会探索它的强大之处. 值得注意的是:我写这篇文章的时候,Data Bindi

数据绑定(data binding)2

据绑定(Data Binding)-Part2 原文链接 : Data Binding – Part 2 原文作者 : Mark Allison 译文出自 : 开发技术前线 www.devtf.cn.未经允许,不得转载! 译者 : desmond1121 校对者: desmond1121 在之前我们做了一个简单的Twitter客户端,但是简单地介绍ViewHolder实现,可能没有充分地让你明白Data Binding的使用方法.那么我们现在就来看看怎么样将Data Binding引入到项目中.

Windows Forms中的数据绑定(二)

window|数据 运行我们运行这个程序来看看是否国家可以正常的显示了.1. 按下F5来运行程序.2. 点击Countries下拉框来看看是否国家数据已经可以显示了.如果正常的话,你就可以看到如下图8所示的程序: 图8.使用ComboBox来显示小数据集可以提高性能带参数的查询来显示数据现在已经可以看到ComboBox中的国家数据了,接着我们就来做选择ComboBox中的一个国家,在DataGrid中只显示这个国家的客户资料.我们按照这些步骤来做:1. 把form的load事件中读取DataGr