国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

Ajax一統(tǒng)天下之Dojo整合篇

2024-09-06 12:42:53
字體:
供稿:網(wǎng)友
隨著Ajax應(yīng)用越來越多,各種Ajax Library(Prototype),Ajax Framework(DWR),Ajax Toolkit(Dojo,YUI)也日漸豐富起來,有沒有辦法將這些結(jié)合起來呢?類似Spring的做法,當然我沒法整出一個IoC的微內(nèi)核將各種Ajax“粘合”起來,但是將這些Ajax可重用的組件加以整合應(yīng)該是沒有問題的,這樣即可以避免重復(fù)發(fā)明輪子,還可以針對各種Ajax進行揚長避短,形成一套比較全面的Ajax解決方案。同時也增加了開發(fā)人員選擇自己熟悉Ajax組件的靈活性。 
目前我們公司已經(jīng)形成一套基于Ajax的完整的產(chǎn)品,封裝了自己的Ajax前后臺通訊機制以及提供了可重用的客戶端組件,我嘗試了一下將我們的產(chǎn)品與Dojo Toolkit進行整合。下面是我的做法,整合的是Dojo ComboBox Widget,它實際上是一個Auto Completion組件,類似Google Suggest。 
從Dojo提供的測試類test_ComboBox.html入手,加debugger進行跟蹤調(diào)試,理清Dojo Widget的加載流程。 
經(jīng)過跟蹤調(diào)試,對Dojo的Widget有了一個大致的了解:首先是加載當前需要的JavaScript文件,然后對整個html頁面進行解析。在頁面上使用widget有三種方式:一種就是在html元素上添加一些dojo能解析的屬性,如 
<select dojoType="combobox" style="width: 300px;" name="foo.bar1" autocomplete="false"  
        onValueChanged="setVal1"  
    >   
其中的dojoType,autocomplete, onValueChanged都是dojo能夠識別的屬性,這個有些類似typestry的做法。第二種就是使用DojoML的寫法: 
<dojo:combobox style="width: 300px;" name="foo.bar1" autocomplete="false"  
        onValueChanged="setVal1"  
    />   
這種寫法有些變態(tài),跟jsp中的自定義標簽基本就是一回事,只是把解析的過程從后臺移到了前臺來做,后來看到有些框架也這么干,也就沒話說了。 
還有一種寫法是使用javascript在頁面加載完成之后,在指定的html元素創(chuàng)建widget: 
var combo;   
dojo.addOnLoad(init);   
function init(){   
combo = dojo.widget.createWidget("dojo:ComboBox", {name:"prog",autocomplete:false,dataUrl:"comboBoxData.js"}, dojo.byId("progCombo"));   
    }   
在對元素解析創(chuàng)建的時候同時利用dojo定義的combobox html模版以及css模版完成在頁面中插入最終的combobox控件的目的。 
接下來看看Dojo ComboBox如何通過ajax與后臺通訊,Dojo ComboBox提供了兩種自動完成方式:一種是將所有的數(shù)據(jù)下載到前臺緩存,然后在前臺根據(jù)用戶輸入的數(shù)據(jù)從緩存中匹配出自動完成所需要的數(shù)據(jù)列表。另外一種就是根據(jù)用戶每次輸入的數(shù)據(jù)實時向后臺發(fā)送請求獲得要自動完成的數(shù)據(jù),當然這個數(shù)據(jù)也會以用戶輸入的內(nèi)容為key,以得到的數(shù)據(jù)為value進行緩存。對于兩種方式,Dojo通過不同的DataProvider來實現(xiàn)(dojo.widget.incrementalComboBoxDataProvider和dojo.widget.basicComboBoxDataProvider),這一點非常精妙,讓我非常佩服。而這兩個類都是通過dojo.declare(“className”, “parentClassName”, constructor, declarationBody)這種方式來做的,這個也和我們以往的做法有別。總之就是比較精妙啦! 
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 南华县| 石台县| 江达县| 青阳县| 三原县| 额敏县| 虹口区| 芦溪县| 任丘市| 黄石市| 安新县| 裕民县| 囊谦县| 元谋县| 顺昌县| 运城市| 姚安县| 滕州市| 宁安市| 多伦县| 西城区| 江达县| 玉环县| 龙胜| 仙游县| 江城| 台南县| 安庆市| 湛江市| 广安市| 绥滨县| 英超| 阳原县| 霍城县| 乐昌市| 郸城县| 内丘县| 延寿县| 即墨市| 兰州市| 长宁区|