亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

HTML中的數據綁定(Data Binding)

2024-08-26 00:15:34
字體:
來源:轉載
供稿:網友
有沒想過在javascript中使用recordset?原來在客戶端操作數據也可以這樣簡單,定義一個數據源,將數據綁定在各種tag上,實現應用程序般的效果,酷斃了?。ㄊ紫壬昝饕稽c,文章的內容全部來自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可以,但是這種方法太笨拙了吧,又不安全。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久久久久免费| 日本精品久久久久久久| 日本欧美一级片| 亚洲自拍欧美色图| 亚洲毛茸茸少妇高潮呻吟| 欧美怡红院视频一区二区三区| 国产精品三级美女白浆呻吟| 97视频色精品| 色偷偷88888欧美精品久久久| 一区二区欧美日韩视频| 国产精品美女免费视频| 亚洲中国色老太| 日韩欧美在线看| 亚洲天堂男人天堂女人天堂| 日韩专区中文字幕| 欧美巨乳美女视频| 国产在线999| 成人av在线天堂| 久久精品国产一区| 亚洲午夜未满十八勿入免费观看全集| 亚洲国产日韩欧美综合久久| 精品国产成人av| 精品久久久香蕉免费精品视频| 国产精品欧美激情在线播放| 亚洲一区二区三区乱码aⅴ蜜桃女| 久久精品国产亚洲一区二区| 国产日韩欧美在线观看| 久久久久久久999| 日韩av不卡在线| 中文字幕欧美日韩| 国产成人亚洲精品| 欧美黄色性视频| 欧美中文字幕精品| 国产精品扒开腿做| 北条麻妃一区二区在线观看| 国产精品看片资源| 色综合视频网站| 欧美成aaa人片免费看| 国产精品日日摸夜夜添夜夜av| 精品亚洲一区二区| 亚洲一区二区三区777| 91沈先生作品| 欧美大胆a视频| 黄色精品在线看| 色综合色综合久久综合频道88| 亚洲桃花岛网站| 精品久久久一区| 成人av在线亚洲| 色综合久久久久久中文网| 国产黑人绿帽在线第一区| 国产999在线观看| 亚洲欧美另类在线观看| 日韩成人高清在线| 日韩在线中文视频| 久久久久成人网| 欧美黄色片视频| 国产精品免费视频xxxx| 国产精品一区二区三区毛片淫片| 久久福利网址导航| 国产精品视频大全| 欧美精品在线网站| 亚洲福利视频在线| 国产精品久久久| 97在线视频国产| 亚洲欧美日韩精品久久| 欧美中文字幕视频| 国产欧美日韩最新| 91精品国产91久久久久福利| 九九热精品在线| 欧美日韩国产综合视频在线观看中文| 国产一区二区久久精品| 欧美精品在线观看91| 97**国产露脸精品国产| 久久精品国产亚洲精品| 一本大道香蕉久在线播放29| 国产免费一区二区三区在线观看| 亚洲伦理中文字幕| 中文欧美在线视频| 欧美一区二区大胆人体摄影专业网站| 国产一区二区美女视频| 国产精品91久久久久久| 久久天天躁狠狠躁老女人| 欧美黑人巨大精品一区二区| 日韩免费av一区二区| 久久精品2019中文字幕| 欧美日韩亚洲高清| 欧美午夜宅男影院在线观看| 欧美激情亚洲视频| 亚洲国产97在线精品一区| 午夜精品一区二区三区av| 国产精品久久电影观看| 欧美国产高跟鞋裸体秀xxxhd| 精品伊人久久97| 国模精品一区二区三区色天香| 国产成人精品在线观看| 亚洲欧美中文日韩在线| 欧美野外猛男的大粗鳮| 日韩av在线网页| 曰本色欧美视频在线| 国产欧美日韩最新| 福利二区91精品bt7086| 国产成人福利视频| 国产a级全部精品| 久久国产精品网站| 91在线高清免费观看| 亚洲毛片在线观看| 美女扒开尿口让男人操亚洲视频网站| 在线播放日韩专区| 亚洲欧美日韩爽爽影院| 日韩激情视频在线播放| 欧美劲爆第一页| 欧美在线视频导航| 欧美精品性视频| 久久噜噜噜精品国产亚洲综合| 国产亚洲精品美女久久久| 欧美在线视频免费观看| 毛片精品免费在线观看| 亚洲一级片在线看| 国产精品入口免费视| 欧美成人午夜免费视在线看片| 中文字幕亚洲无线码a| 91久久久久久国产精品| 日韩小视频在线| 国产亚洲一级高清| 综合网日日天干夜夜久久| 成人h猎奇视频网站| 日韩av免费一区| 欧美一级bbbbb性bbbb喷潮片| 欧美wwwwww| 亚洲iv一区二区三区| 久久久久久一区二区三区| 日韩精品极品在线观看播放免费视频| 日韩中文在线中文网三级| 韩国三级日本三级少妇99| 欧美激情乱人伦一区| 欧美日韩国产123| 国产精品av免费在线观看| 国产欧美精品在线播放| 亚洲精品小视频| 亚洲美女中文字幕| 成人激情视频在线| 欧美专区第一页| 日韩在线观看网站| 中文字幕亚洲二区| 久久香蕉国产线看观看网| 亚洲一区二区三区777| 亚洲热线99精品视频| 95av在线视频| 亚洲成**性毛茸茸| 51精品国产黑色丝袜高跟鞋| 日韩av一区在线观看| 精品国产乱码久久久久久虫虫漫画| xxxxxxxxx欧美| 久久手机精品视频| 欧美激情xxxx| 91国自产精品中文字幕亚洲| 欧美二区在线播放| 神马国产精品影院av| 在线成人一区二区| 欧美日韩一区二区在线| 中文字幕欧美日韩在线| 欧美亚洲视频一区二区| 欧美激情网站在线观看| 欧美午夜女人视频在线|