版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、用jQuery和jTemplates插件實(shí)現(xiàn)客戶端分頁(yè)的表格展現(xiàn)一直以來(lái)覺得用JSON和JavaScript在客戶端綁定數(shù)據(jù)給一個(gè)表格或者Grid是件很麻煩的事情。Microsoft ASP.NET Ajax提供了類似和這樣的類來(lái)幫助實(shí)現(xiàn)客戶端綁定,也可以用for循環(huán)來(lái)動(dòng)態(tài)構(gòu)建表格,但這些都顯得很麻煩而且很不靈活。jQuery的jTemplates插件實(shí)現(xiàn)了一種靈活的方式來(lái)控制顯示,它允許我們定義好一個(gè)顯示模板,jQuery在展現(xiàn)數(shù)據(jù)時(shí)根據(jù)選擇的模板來(lái)動(dòng)態(tài)生成。這就類似于ASP.NET中的ItemTemplate,也和XSLT有些類似。通過(guò)這樣的方式,你可以很容易的在客戶端通過(guò)自定義模板以很靈
2、活的方式展現(xiàn)列表數(shù)據(jù)。jQuery官方網(wǎng)站給jTemplates的定義是:jTemplates is a template engine 100% in JavaScript.更多的信息可以參考。接下來(lái)我們實(shí)現(xiàn)一個(gè)小例子來(lái)演示如何使用jTemplate去構(gòu)建一個(gè)RSS閱讀器。創(chuàng)建RSS閱讀器 RSS源通常都位于另外的domain中,而在AJAX中瀏覽器通常禁止cross-domain的訪問(wèn),在這里,為了避開這個(gè)問(wèn)題我們可以在服務(wù)端去取得數(shù)據(jù)。通常我們可以將這些方法做成WebMethod方法放到WebServices中,但這里我們可以將這些方法放到頁(yè)面的cs文件中。需要注意的是,這個(gè)方法必須被聲
3、明為Static方法,而且要以WebMethod標(biāo)注。這樣做的目的是,只有在標(biāo)注為WebMethod,客戶端才能正常訪問(wèn)這個(gè)方法。而Static標(biāo)記標(biāo)識(shí)了這個(gè)方法不與任何這個(gè)頁(yè)面的實(shí)例相關(guān),而是而這個(gè)頁(yè)面本身相關(guān),對(duì)于任何一個(gè)實(shí)例而言都是相同的。所以在你調(diào)用的時(shí)候,你不需要與任何頁(yè)面類的實(shí)例相關(guān)。WebMethodpublicstaticIEnumerableGetFeeds(intPageSize,intPageNumber)stringstrFeedUrl = System.Configuration.ConfigurationManager.AppSettingsFeedUrl;XDoc
4、umentfeedXML =XDocument.Load(strFeedUrl);varfeeds =fromfeedinfeedXML.Descendants(item)selectnew Date =DateTime.Parse(feed.Element(pubDate).Value).ToShortDateString(), Title = feed.Element(title).Value, Link = feed.Element(link).Value, Description = feed.Element(description).Value, ;/paging. (LINQ)re
5、turnfeeds.Skip(PageNumber - 1) * PageSize).Take(PageSize);在上邊的方法中設(shè)定了RSS的地址,并通過(guò)LINQ to XML來(lái)取得我們想要的屬性。Skip和Take函數(shù)聯(lián)合起來(lái)實(shí)現(xiàn)了一個(gè)分頁(yè)的功能。通過(guò)jQuery調(diào)用Page Method jQuery.Ajax方法實(shí)現(xiàn)了用Ajax的方式來(lái)請(qǐng)求一個(gè)頁(yè)面并設(shè)定回調(diào)函數(shù)來(lái)處理相應(yīng)狀態(tài)和結(jié)果。在我們的實(shí)例中,需要請(qǐng)求上邊寫的PageMethod并處理返回結(jié)果。functionDisplayRSS(page) $.ajax( type:POST, url:Default.aspx/GetFeeds
6、, data:PageSize:+ pageSize +, PageNumber:+ page +, contentType:application/json; charset=utf-8, dataType:json, success:function(msg) /TODO:Show the result as a table. alert(msg); );在success的回調(diào)函數(shù)中我們什么也沒(méi)有做,先來(lái)看看result到底是個(gè)什么東西。在瀏覽器中設(shè)置允許調(diào)試腳本,定義一個(gè)函數(shù)供回調(diào)函數(shù)中調(diào)用,然后設(shè)定斷點(diǎn)在新的函數(shù)中。我們看到在服務(wù)端將數(shù)據(jù)以IEnumerable返回后實(shí)際上在resul
7、t中包含的是一個(gè)JSON表示的數(shù)據(jù)集合。每個(gè)對(duì)象含有Date, Description, Link和Title屬性,這和前邊用LINQ取XML字段時(shí)是相符的。因?yàn)槟阋呀?jīng)擁有了這個(gè)數(shù)據(jù)集合,接下來(lái)所要做的就是在客戶端通過(guò)某種方式展現(xiàn)出來(lái)。你也許會(huì)想到用動(dòng)態(tài)拼接Table的方式來(lái)做,但這并不靈活。jTemplates提供了更優(yōu)雅的方式來(lái)實(shí)現(xiàn)。用jTemplate來(lái)展現(xiàn)數(shù)據(jù)jTemplate就把數(shù)據(jù)展現(xiàn)的方式和業(yè)務(wù)邏輯分開來(lái),允許你定義好一個(gè)模板,然后再運(yùn)行時(shí)會(huì)根據(jù)模板的內(nèi)容來(lái)render.和ASP.NET中的綁定相似,也有一個(gè)特定的符號(hào)來(lái)表示綁定的上下文對(duì)象$T。$T就類似于上圖中的result.
8、dn某一個(gè)業(yè)務(wù)對(duì)象,需要展現(xiàn)哪個(gè)屬性后邊直接跟.PropertyName即可。因?yàn)楸砀竦男惺强勺兊?,所以這里就類似于XSLT中一樣來(lái)控制動(dòng)態(tài)生成.DateTitle / Excerpt #foreach $T.d as post$T.post.Date$T.post.Title$T.post.Description #/for在頁(yè)面請(qǐng)求完P(guān)ageMethod并成功返回后可以來(lái)應(yīng)用模板展現(xiàn)數(shù)據(jù)了:$(document).ready(function() / On page load, display the first page of results.DisplayRSS(1););functi
9、onDisplayRSS(page) success:function(msg) / Render the resulting data, via template.ApplyTemplate(msg); / TODO: Update navigation statusfunctionApplyTemplate(msg) $(#Container).setTemplateURL(Template/RSSTable.htm,null, filter_data:false);$(#Container).processTemplate(msg);現(xiàn)在為止我們只取得了數(shù)據(jù)并展現(xiàn)了特定的條數(shù)而無(wú)法實(shí)現(xiàn)分
10、頁(yè)。看起來(lái)一切都好除了分頁(yè)。增加客戶端分頁(yè)功能為了實(shí)現(xiàn)分頁(yè)首先需要知道頁(yè)碼總數(shù),這樣我們可以簡(jiǎn)單的通過(guò)Previous | Next來(lái)實(shí)現(xiàn)導(dǎo)航。假設(shè)一下在服務(wù)端我們需要什么:總頁(yè)數(shù),頁(yè)大小,當(dāng)前頁(yè),判斷并控制Previous|Next導(dǎo)航的有效性及其動(dòng)作。ok,明白我們所要做的步驟:獲取頁(yè)總數(shù)通過(guò)Page Method來(lái)返回控制頁(yè)大小和當(dāng)前頁(yè)控制Previous | Next導(dǎo)航的有效性實(shí)現(xiàn)Previous | Next導(dǎo)航動(dòng)作首先,在Template中增加頁(yè)面導(dǎo)航:Previous PageNext Page其次,聲明獲取頁(yè)面總數(shù)或者條目總數(shù)的Page Method.和前邊獲取數(shù)據(jù)源的方法很
11、類似我們除了不需要返回任何XML的屬性值外僅僅調(diào)用Count方法即可。 WebMethodpublicstaticintGetFeedsCount() stringstrFeedUrl = System.Configuration.ConfigurationManager.AppSettingsFeedUrl;XDocumentfeedXML =XDocument.Load(strFeedUrl);returnfeedXML.Descendants(item).Count(); 設(shè)置默認(rèn)的頁(yè)面大小,并在顯示數(shù)據(jù)后更新導(dǎo)航欄狀態(tài)。在頁(yè)面中我們需要請(qǐng)求這個(gè)PageMethod并來(lái)計(jì)算總的頁(yè)數(shù)。va
12、rcurrentPage = 1;varlastPage = 1;varpageSize = 5;functionGetRSSItemCount() $.ajax( type:POST, url:Default.aspx/GetFeedsCount, data:, contentType:application/json; charset=utf-8, dataType:json, success:function(msg) / msg.d will contain the total number of items, as/an integer. Divide to find total n
13、umber of pages. lastPage = Math.ceil(msg.d / pageSize);/ TODO: Update navigation status );接下來(lái)就是實(shí)現(xiàn)/ TODO: Update navigation status標(biāo)記的內(nèi)容了:更新導(dǎo)航欄的狀態(tài)及其動(dòng)作。當(dāng)前頁(yè)的值存儲(chǔ)在currentPage變量中,lastPage告訴我們哪一頁(yè)是最后頁(yè),通過(guò)這兩個(gè)參數(shù)可以很容易的控制導(dǎo)航狀態(tài)。而因?yàn)樗麄兪侨肿兞?,所以?zhí)行導(dǎo)航時(shí)只需要通過(guò)簡(jiǎn)單的+/-操作,最終請(qǐng)求GetFeeds方法時(shí)會(huì)取得相應(yīng)頁(yè)的數(shù)據(jù)。functionUpdatePaging() / If wer
14、e not on the first page, enable the Previous link.if(currentPage != 1) $(#PrevPage).attr(href,#); $(#PrevPage).click(PrevPage);/ If were not on the last page, enable the Next link.if(currentPage != lastPage) $(#NextPage).attr(href,#); $(#NextPage).click(NextPage);functionNextPage(evt) / Prevent the
15、browser from navigating needlessly to #.evt.preventDefault();/ Entertain the user while the previous page is loaded.DisplayProgressIndication();/ Load and render the next page of results, and/increment the current page number.DisplayRSS(+currentPage);functionPrevPage(evt) / Prevent the browser from navigating needlessly to #.evt.preventDefault();/ Entertain the user while the previous page is loaded.DisplayProgressIndication();/ Load and render the
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 施工方案編制滯后
- 二零二四年度新型購(gòu)物中心租賃合同霸王條款排除協(xié)議3篇
- 無(wú)線信號(hào)調(diào)制解調(diào)技術(shù)-深度研究
- 二零二五年度出租車智能調(diào)度系統(tǒng)運(yùn)營(yíng)服務(wù)合同3篇
- 合約安全測(cè)試平臺(tái)構(gòu)建-深度研究
- 天然氣液化技術(shù)創(chuàng)新-深度研究
- 心理創(chuàng)傷與精神障礙研究-深度研究
- 二零二五年度60歲以上人員家政服務(wù)合同標(biāo)準(zhǔn)文本3篇
- 2025年智能柴油發(fā)電機(jī)設(shè)備研發(fā)與生產(chǎn)授權(quán)合同4篇
- 城市綠化與自然景觀融合-深度研究
- 車站值班員(中級(jí))鐵路職業(yè)技能鑒定考試題及答案
- 極簡(jiǎn)統(tǒng)計(jì)學(xué)(中文版)
- JTG∕T E61-2014 公路路面技術(shù)狀況自動(dòng)化檢測(cè)規(guī)程
- 高中英語(yǔ)短語(yǔ)大全(打印版)
- 2024年資格考試-對(duì)外漢語(yǔ)教師資格證筆試參考題庫(kù)含答案
- 軟件研發(fā)安全管理制度
- 三位數(shù)除以兩位數(shù)-豎式運(yùn)算300題
- 寺院消防安全培訓(xùn)課件
- 比摩阻-管徑-流量計(jì)算公式
- GB/T 42430-2023血液、尿液中乙醇、甲醇、正丙醇、丙酮、異丙醇和正丁醇檢驗(yàn)
- 五年級(jí)數(shù)學(xué)應(yīng)用題100道
評(píng)論
0/150
提交評(píng)論