ホームページ  >  記事  >  ウェブフロントエンド  >  HTML_CSS/HTML でのデータ バインディング

HTML_CSS/HTML でのデータ バインディング

WBOY
WBOYオリジナル
2016-05-16 12:12:071960ブラウズ

信息来源:Wayne_Deng的专栏

有没想过在java script中使用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文件。
下面是一个简单的示例:

ID=dsoComposer WIDTH=0 HEIGHT=0>
    



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

示例:

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 5以上可以这样:



另外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 Last Birth Death Origin 
Hector Last Birth Death Origin 
Hector Last Birth Death Origin 
Hector Last Birth Death Origin 
Hector Last B180339696939
Modest Moussorgsky 1839 1881 Russia 
Franz Liszt 1811 1886 France 
Antonio Vivaldi 167886 France 
Antonio Vivaldi 167886 France 50 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 是這樣的:PANSATA
而且可以存取資料來源的ado:
var oRecordSet = dsoComposer.recordset;
自然就有oRecordSet = dsoComposer.recordset;
自然就有oRecordSet .MoveNext等等。

如:
    onclick="t將BUTTON VALUE="     onclick="tdcComposers.recordset.MovePrevious();
    if ( 🎜> "
    onclick="tdcComposers.recordset.MoveNext();
        tdcComposers.recordset.MoveLast();">
>"
    onclick="tdcComposers.recordset.MoveLast()">

還可以這樣用:
For Each objFld in rsAttendees.Fields
    document.write("The field name is " &  pFld.Name &  " & objFld.Value & "
")
Next


新增刪除記錄就是:oRecordSet.AddNew()以及oRecordSet.Delete()。

第三步:回應各種資料事件(事件模型)
如何在資料變更後做出對應的處理?
msdn中提供的方法是這樣的:
<script> <BR>    … <BR></script>
    …

這些是事件名稱清單:

Event Bubbles Cancelable Applies to Introduced In Internet Explorer Version 
onbeforeupdate True 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.0com 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 
怎麼樣?
我覺得http://msdn.microsoft.com/workshop/samples/author/databind/dbevts.htm算是應用比較綜合的例子了,好好研究一下,必有收穫。

網路上有不少利用資料綁定實現分頁的範例,其實資料綁定還可以做更多的事情吧?應該在rich client裡面有非常大的應用,例如製作非常複雜的datagrid。

現在想進一步搞清楚的是如何簡單實現與伺服器端的同步,因為客戶端的資料綁定是對伺服器端沒有影響的(你可以從伺服器端產生資料來源,但是在客戶端的操作不會自動返回伺服器),msdn上說RDS可以,但這種方法太笨拙了吧,又不安全。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。