在很久很久以前,也就是asp.net ajax剛引起大眾關注不久,asp.net ajax團隊成員ScottGu發布 了一篇非常實用的文章:
英文:Tip/Trick: Cool UI Templating Technique to use with ASP.NET AJAX for non-UpdatePanel scenarios ,
中文:技巧和訣竅:在不用UpdatePanel的情形下可與ASP.NET AJAX 使用的酷UI模板技術
看完之後,非常受用,並給我留下了非常深刻的映像,之後在很多場景裡都借鑒了 ScottGu的這種方案。如果你也仔細閱讀過這篇文章,那麼應該可以明白在這種方式中,是如 何將客戶端繁瑣的拼接html字符串或dom片段的工作,借助asp.net領域的ascx用戶控件來方 便快捷及優雅的完成的。
在EnjooSite的開發過程中,因為涉及到大量的客戶端編碼,自然少不了大量的客戶端頁 面建構,因此,我便再次應用了ScottGu的這種方案,只不過根據EnjooSite項目的特點,進 行了一定程度的優化和改進,同時引入了jTemplates javascript庫進行協同工作。
針對jTemplates的特點,以及ScottGu酷UI模板技術的各自優點,我們來看看我是如何改 進的:
第一步:熟悉jTemplates的工作方式
widgetContainer.setTemplate(template, null);
widgetContainer.processTemplate(data);
jTemplates的工作方式非常直觀:
第一句setTemplate(template,null),將jQuery對象widgetContainer設置為可模板化處 理對象,模板結構由參數template確定;
第二句processTemplate(data);則對模板化的對象進行數據呈現處理,實際數據由參數 data確定。
我之所以特別解釋這2句,是因為想引起大家注意,jTemplates的工作過程中,有模板和 數據這2個重要的概念。
第二步:獲取template和data
既然jTemplates需要模板和數據的協同工作,那麼我們可以怎樣方便、快捷的提供出這2 項內容呢?
template.ascx
1 <div>
2 {#if $T.staticHTMLs.length>0 }
3 {#foreach $T.staticHTMLs as item}
4 <div id="StaticHTML_{$T.item.id} _Viewer" commandname="enjoosite_statichtml_item" commandargument="{$T.item.id}">{$T.item.description}</div>
5 {#/for}
6 {#/if}
7 <div id="staticHTML_{$T.widgetId}_Pager" class="pager" commandargument="{$T.maxItems}_{$T.listCount}_{$T.pageCount}_ {$T.widgetId}"></div>
8 <div class="enjoosite_widget_auto_action">
9 (function($){
10 ensure({js:'/jquery-pager.1.1.js'},function(e){buildStaticHtmlPager ('<%= string.Format("staticHTML_{0}_Pager",WidgetId) %>');});
11 })(jQuery)
12 </div>
13 </div>