HTML中的数据绑定
HTML中的数据绑定
发布时间:2017-01-07 来源:查字典编辑
摘要:信息来源:Wayne_Deng的专栏有没想过在javascript中使用recordset?原来在客户端操作数据也可以这样简单,定义一个数据...

信息来源:Wayne_Deng的专栏

有没想过在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起,就支持下面四种数据源:

TabularDataControl(TDC)

TDC提供了一个简单的访问带有格式的文本数据的方法,一般是csv文件。

下面是一个简单的示例:

<OBJECTCLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83"

ID=dsoComposerWIDTH=0HEIGHT=0>

<PARAMNAME="DataURL"VALUE="composer.csv">

</OBJECT>

RemoteDataService(RDS)

远程数据服务,直接访问远程服务器端的数据,InternetExplorer4.0.RDS通过OLE-DB或OpenDatabaseConnectivity(ODBC)来实现。

示例:

<OBJECTclassid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"

ID=dsoComposerHEIGHT=0WIDTH=0>

<PARAMNAME="Server"VALUE="http://musicserver">

<PARAMNAME="Connect"VALUE="dsn=music;uid=guest;pwd=">

<PARAMNAME="SQL"VALUE="selectcompsr_namefromcomposer">

</OBJECT>

不过感觉有点安全性的问题,因为客户端能看到这段代码。

XMLDataSource

XML就不多说了,在IE4.0中这样使用:

<APPLET

CODE="com.ms.xml.dso.XMLDSO.class"

ID="xmldso"

WIDTH="0"

HEIGHT="0"

MAYSCRIPT="true">

<PARAMNAME="URL"VALUE="composer.xml">

</APPLET>

InternetExplorer5以上可以这样:

<>

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

MSHTMLDataSource

html数据页示例:

<H1ID=COMPSR_FIRST>Hector</H1>

<MARQUEEID=COMPSR_LAST>Berlioz</MARQUEE>

<DIVID=COMPSR_BIRTH>1803</DIV>

<H2ID=COMPSR_FIRST>Modest</H2>

<H3ID=COMPSR_LAST>Moussorgsky</H3>

<BUTTONID=COMPSR_BIRTH>1839</BUTTON>

<TEXTAREAID=COMPSR_FIRST>Franz</TEXTAREA>

<XMPID=COMPSR_LAST>Liszt</XMP>

<SPANID=COMPSR_BIRTH>1811</SPAN>

一旦定义可以这样访问:

<OBJECTID=htmlComposerDATA="compdata.htm"HEIGHT=0WIDTH=0>

</OBJECT>

.第二步:绑定数据到HTML元素上

一般都是通过tag中的datasrc和datafld实现绑定的。例如:

<INPUTTYPE=TEXTBOXDATASRC="#dsoComposers"DATAFLD="compsr_last">

<TABLEDATASRC=#dsoComposer>

<TR>

<TD><DIVDATAFLD=compsr_first></DIV></TD>

</TR>

</TABLE>

这个是绑定表格的示例:

http://msdn.microsoft.com/workshop/samples/author/databind/dbtable.htm

其中数据来源:

<OBJECTid="tdcComposers"CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">

<PARAMNAME="DataURL"VALUE="http://msdn.microsoft.com/workshop/samples/author/databind/composer.csv">

<PARAMNAME="UseHeader"VALUE="True">

<PARAMNAME="TextQualifier"VALUE="'">

</OBJECT>

绑定的table

<TABLEdatasrc=#tdcComposers>

<THEAD><TRSTYLE="font-weight:bold">

<TD>First</TD><TD>Last</TD><TD>Birth</TD><TD>Death</TD><TD>Origin</TD>

</TR></THEAD>

<TBODY>

<TR>

<TD><DIVdatafld="compsr_first"></DIV></TD>

<TD><DIVdatafld="compsr_last"></DIV></TD>

<TD><DIVdatafld="compsr_birth"></DIV></TD>

<TD><DIVdatafld="compsr_death"></DIV></TD>

<TD><DIVdatafld="origin"></DIV></TD>

</TR>

</TBODY>

</TABLE>

这就是效果了:

FirstLastBirthDeathOrigin

HectorBerlioz18031869France

ModestMoussorgsky18391881Russia

FranzLiszt18111886France

AntonioVivaldi16781741Italy

JohannSebastianBach16851750Germany

LudwigvanBeethoven17701827Germany

WolfgangAmadeusMozart17561791Austria

JosephHaydn17321809Germany

ClaudeDebussy18621918France

第三步:数据的动态添加,删除等等(对象模型)

当然绑定可以是动态的:

在script中:

span1.dataSrc="#dsoComposer";

span1.dataFld="compsr_first";

html是这样的:

<SPANDATASRC="#dsoComposer"DATAFLD="compsr_first"></SPAN>

而且可以访问数据源的ado:

varoRecordSet=dsoComposer.recordset;

自然就有oRecordSet.MoveNext等等。

如:

<INPUTID=cmdNavFirstTYPE=BUTTONVALUE="<<"

onclick="tdcComposers.recordset.MoveFirst()">

<INPUTID=cmdNavPrevTYPE=BUTTONVALUE="<"

onclick="tdcComposers.recordset.MovePrevious();

if(tdcComposers.recordset.BOF)

tdcComposers.recordset.MoveFirst();">

<INPUTID=cmdNavNextTYPE=BUTTONVALUE=">"

onclick="tdcComposers.recordset.MoveNext();

if(tdcComposers.recordset.EOF)

tdcComposers.recordset.MoveLast();">

<INPUTID=cmdNavLastTYPE=BUTTONVALUE=">>"

onclick="tdcComposers.recordset.MoveLast()">

还可以这样用:

<SCRIPTLanguage="VBScript">

ForEachobjFldinrsAttendees.Fields

document.write("Thefieldnameis"&objFld.Name&"<BR>")

document.write("Thefieldvalueis"&objFld.Value&"<BR>")

Next

</SCRIPT>

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

第三步:响应各种数据事件(事件模型)

如何在数据更改后做出相应的处理?

msdn中提供的方法是这样的:

<SCRIPTFOR=cboSort(数据源名)EVENT=onchange(事件名)>

……

</SCRIPT>

这些是事件名列表:

EventBubblesCancelableAppliestoIntroducedInInternetExplorerVersion

onbeforeupdateTrueTrueboundelements4.0

onafterupdateTrueFalseboundelements4.0

onrowenterTrueFalseDSO4.0

onrowexitTrueTrueDSO4.0

onbeforeunloadFalseFalsewindow4.0

ondataavailableTrueFalseDSO4.0

ondatasetcompleteTrueFalseDSO4.0

ondatasetchangedTrueFalseDSO4.0

onerrorupdateTrueTrueboundelements4.0

onreadystatechangeTrueFalseDSO4.0

oncellchangeTrueFalseDSO5.0

onrowsinsertedTrueFalseDSO5.0

onrowsdeleteTrueFalseDSO5.0

怎么样?

我觉得http://msdn.microsoft.com/workshop/samples/author/databind/dbevts.htm算是一个应用比较综合的例子了,好好研究一下,必有收获。

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

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

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新 Div+Css教程学习
热门 Div+Css教程学习
网页设计子分类