HTML中的数据绑定(Data Binding)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
有没想过在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>
这就是效果了:

FirstLastBirthDeathOrigin
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>
这些是事件名列表:

EventBubblesCancelableApplies toIntroduced 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可以,但是这种方法太笨拙了吧,又不安全。
HTML中的数据绑定 CSS/HTML 数据绑定是一种在HTML中将数据和视图进行关联的技术,它使得我们能够动态地更新页面上的内容,而无需手动操作DOM。在本文中,我们将探讨如何在HTML中实现数据绑定,并使用CSS样式来美化我们的绑定效果。通过这个简单的示例,我们展示了如何在HTML中实现数据绑定,并通过CSS样式来美化绑定效果。接下来,我们将使用CSS样式来美化我们的绑定效果。在我们的示例中,当文本发生变化时,我们将应用一个名为。现在,当我们点击按钮时,文本将被更新,并且在每次更新后,文本将在红色和普通样式之间切换。否则,我们将其添加。 阅读详情

相关推荐

html binding属性,HTML中的数据绑定Data Binding

有没想过在javascript中使用recordset?原来在客户端操作数据也可以这样简单,定义一个数据源,将数据绑定在各种tag上,实现应用程序般的效果,酷毙了!(首先申明一点,文章的内容全部来自msdn,不过用我自己的话总结而已。)先看看这样两个例子:http://msdn.microsoft.com/workshop/samples/author/databind/dbevts.htmhtt...

weixin_35517357的博客 613

spring3 页面form标签binding错误。**Neither BindingResult***

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'book' available as request attribute   昨日在学习spring3的时候,在做一个页面传送对象到后台,也就是说页面binding对象,使用到 &lt;form:for...

cowwen的专栏 407

html data bind属性,html - Data-Bind attribute value in jquery - Stack Overflow

I have a checkboxlist which is being binded from the database and Id of the checkbox is being binded with the help of data-bind attribute and when the user clicks the submit button I'm iterating throu...

weixin_29858113的博客 964

Knockout学习 - data-bind

data-bind是在html的dom元素属性中声明一些样式/事件/值的绑定, 但Html本身就有这些如class/style/event/value等属性, 那为什么还要用Knockout去bind呢? 区别在于,ko去bind上述的这些东西时, 主要是针对一些一开始不确定的/或者是动态会发生变化的, 此时,ko就提供了很大的便利, 大大化简了编码, 能轻易的得到你想要的,

whatthehuck的博客 2498

照片模糊分辨率不够?用 Upscayl 免费做 AI 图像放大

手头的照片放大后一片马赛克,印刷尺寸又不够?Upscayl 是一款免费开源的 AI 图像放大工具,支持 Linux、macOS 和 Windows,能把低分辨率图片放大到 4 倍,细节由 AI 补全,而不是单纯拉大像素。它不依赖云端,图片全程在本机 GPU 上处理。 ## 装好并跑起来 最省事的办法是从官网或系统软件源(Linux 的 Flatpak/Snap、macOS 的 App Stor

gitblog_00367的博客 356

什么是前端框架中的数据绑定data binding)?有哪些类型的数据绑定

什么是前端框架中的数据绑定data binding)?有哪些类型的数据绑定

商务合作欢迎私信我 5624

KendoUI 官方示例之 Grid / Binding to remote data

kendoui.io 进入:http://kendoui.io/examples/grid/remote-data-binding.html 转载于:https://my.oschina....

130

什么是前端框架中的数据绑定Data Binding)?有哪些类型的数据绑定

数据绑定的基础概念定义作用数据绑定的类型单向数据绑定定义作用示例一:Vue.js 中的单向数据绑定双向数据绑定定义作用示例二:AngularJS 中的双向数据绑定不同角度的功能使用思路示例三:React 中的受控组件示例四:Vue.js 中的 v-model 和计算属性实际工作中的使用技巧技巧一:利用计算属性技巧二:使用验证库技巧三:性能优化技巧四:按需更新技巧五:状态管理结语数据绑定是现代前端框架中的一项重要特性,它极大地简化了应用的状态管理和视图更新流程。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1277

Vue.js中的双向数据绑定(two-way data binding

Vue.js中的双向数据绑定(two-way data binding

商务合作欢迎私信我 6077

AngularJS 、react 、vue 数据绑定Data Binding

目录 AngularJS 数据绑定Data Binding) react数据绑定Data Binding) vue 数据绑定Data Binding) 1. AngularJS 数据绑定Data Binding) 在Angular网页应用中,数据绑定是数据模型(model)与视图(view) 件的自动同步。Angular的实现方式允许你把应用中的模型看成单一数据源。而视图始终是数据模型的一种展现形式。当模型改变时,视图就能反映这种改变,反之亦然。 1.1 典型模板系统中的数据.

MySundays的博客 856

Angularjs学习笔记03~数据绑定 Data-Binding

这节我们主要讨论一下数据绑定,了解angularjs的双向数据绑定模型比传统的单向数据绑定优越在哪里? 一、AngularJS中的数据绑定先来说说什么是数据绑定吧!开发指南中是这样给出定义的: “AngularJS中的数据绑定就是模型与视图间的自动同步。这种实现方式让你能专心地处理你的模型。视图总是模型的投影。当模型改变,视图就会反映这种改变,反之亦然。” 那么,顾名...

Jartto's Blog 336

Chapter8 Data Binding

当最初发布的时候,AN的亮点之一就是能够将数据集和你的控件捆绑在一起,而不需要你写大量的代码。这些控件知道它们是数据捆绑的,而且能够将数据集合中的各个item渲染为合适的HTML。另外,你可以将这些控件和任意类型的数据源捆绑,从简单的数组到复杂的Oracle数据库查询结果。这是从经典ASP的一个飞越,那时候开发者是需要负责所有的数据访问代码,遍历一个记录集合,为每个数据渲染合适的HTML。 这一

laughfing的专栏 917

vue学习第一天

v-text和v-html和插值表达式的差别 var vm = new Vue({ el: '#app', data: { msg: 'hello world!', msg2: '<B>nihao</B>' } }) 插值表达式 使用双大括号"{{}}"的插值方法...

blank_zio的博客 254

Angular -- Data Binding

One-wayBinding One direction: any changes in the component will directly reflect inside the HTML template but, vice-versa is not possible. String interpolation and property binding allow only one-way data binding. {{ 2 + 2 }} -- string interpolation .

DOITJT的博客 295

03_Data Binding数据绑定

Data-binding in Angular apps is the automatic synchronization of data between the model and view components. The way that Angular implements data-binding lets you treat the model as the single-source-

Kindred的专栏 440

vue: data binding

1.文本 第一种“Mustache” 语法(双大括号)写法第二种 用v-text的指今写法第三种和第四是对es6写法的拓展写法,称模板字符串 <template> <div> <p>hello {{world}}</p> <p v-text="'hello ' + world">&lt...

weixin_30741653的博客 78

Binding库单元测试终极指南:如何编写可靠的绑定测试用例

在Go语言开发中,数据绑定是Web应用开发的核心环节,而Binding库作为反射无关的net/http数据绑定解决方案,其单元测试的质量直接决定了应用的稳定性和可维护性。本文将为您提供完整的Binding库单元测试指南,帮助您编写可靠的绑定测试用例,确保数据绑定逻辑的准确性和健壮性。 ## 📊 为什么Binding库单元测试如此重要? 单元测试是确保Binding库正确性的第一道防线。由于B

gitblog_00522的博客 819

XML与Data Binding

.Net平台中数据类型需要自己为data binding提供支持,如INotifyCollectionChanged与INotifyPropertyChanged。JavaFX中同样如此,如ObservableValue与ObservableList。 实际上,XML是数据类型的良好抽象,并且为data binding提供了内在支持。当XML DOM(文档对象模型)的某一节点发生改动时,触发的事

hk201406的专栏 734

Data Binding

Data Binding

snow365的专栏 638
上一篇: google告诉我们世界是怎样的
下一篇: 如何量化用户体验
dengwei007
博客等级 码龄26年 3粉丝 15原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值